假设页面如下: <BODY>
<INPUT TYPE="text" id="aa" NAME="" value="aaaa">
</BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert(aa.value);
//var aa = 'abc';
//alert(aa);
//-->
</SCRIPT>我有两个问题:
1.为什么JS的第一句可以直接使用aa?
2.如果把JS中那两行注释去掉,第一句运行就会报错。这是为什么?难道JS不是解释型的么?
<INPUT TYPE="text" id="aa" NAME="" value="aaaa">
</BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert(aa.value);
//var aa = 'abc';
//alert(aa);
//-->
</SCRIPT>我有两个问题:
1.为什么JS的第一句可以直接使用aa?
2.如果把JS中那两行注释去掉,第一句运行就会报错。这是为什么?难道JS不是解释型的么?
解决方案 »
- 为什么当鼠标快速晃动后,jquery的fadeIn()和fadeOut()没有效果了呢?
- 怎么能让框架网页一打开就让它在屏幕的中央?
- 求助个功能 谢谢 在线
- 怎么捕获Javascript中的所有事件?
- JS做IF条件判断时候,如果有两个条件应该怎么写?
- 一个很好的问题,欢迎大家进来讨论!
- 在web中如何让获的焦点的控件或链接不显示虚线框?
- 哪里有Javascript的chm函数手册?40分相送
- 如何建一个可以提问的论坛,请介绍一下讨论这个问题的一些网站
- 关于闭包,这段代码运行过程解释下,闭包概念还没大搞懂
- 请高手赐教,文本域默认日期改为"不限" 在线等待~~!
- 请高手看看我这个检查IP地址的代码中小数点查询怎么出错了....
try:<BODY>
<INPUT TYPE="text" id="aa" name="aa" value="aaaa">
</BODY>
<SCRIPT type="text/javascript">
<!--
alert(document.getElementById('aa'));
var aa = 'abc';
alert(aa);
//-->
</SCRIPT>
其实我的问题是,定义了一个id='aa'的元素,可以在js里直接访问,不需要通过document.getElementById。那么这个aa的变量是谁在什么时候定义好的呢?
然后,为什么后面我使用var aa来定义之后,会导致前面那句又不可以用了呢?
CSDN的早期注册的,当时想也没想就用了中文了。
re:
这种想法就是错的!在IE的早期或许好用.那么这个aa的变量是谁在什么时候定义好的呢?
re:
你是说这样么?
var aa=document.getElementById('aa');
var aa;
alert(aa.value);
aa = 'abc';
alert(aa);在执行alert(aa.value)时候,aa.value的值就是undefined
你把它拆成2断就不会这样<script>
alert(aa.value);
</script>
<script>
var aa = "abc";
alert(aa);
</script>
在执行alert(aa.value)时候,aa的值就是undefined, 调用aa.value就会报错
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<BODY>
<INPUT TYPE="text" id="aa" NAME="" value="aaaa">
</BODY>
<SCRIPT type="text/javascript">
<!--
alert(aa.value);
var aa = 'abc';
alert(aa);
//-->
</SCRIPT> </html>我的w2k3 sp2 ie7是报错的!看IBM
http://www.ibm.com/developerworks/web/library/wa-e4js/index.html
MSDN
http://msdn.microsoft.com/en-us/library/ms535126%28VS.85%29.aspx
注意这时html的doctype在这要起作用!
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<BODY>
<INPUT TYPE="text" id="aa" NAME="aa" value="aaaa">
</BODY>
<SCRIPT type="text/javascript">
<!--
alert(aa.value);
var aa = 'abc';
alert(aa);
//-->
</SCRIPT> </html>以上代码在WinXP SP3 IE7下运行的,结果是第一个alert就报错,说aa.value为空或不是对象。
其实是aa为空或不是对象,你可以把第一句改成alert(typeof(aa))可以输出undefined。问题来了,如果没有2 3两句,第一个alert是没有问题的。
为什么后面的var 会导致它出错?
按11楼的解释,第一个alert的aa还没有"显式"地var过,那会隐式的var一次,可如果没有2 3两句,却是可以运行的。这个解释我认为不通。
14楼的第一个链接看起来挺有道理的。但后面的var aa会导致之前的alert有错,这个还是没想明白。
Element referenced by ID/NAME in the global scope. Use W3C standard document.getElementById() instead.
[Break on this error] alert(aa.value);
<input id="aa" value="123" />
<script>
alert(aa.value); // 这里当然没有问题.因为 aa 就是那个 input, input 有value. 没有错
</script>
<input id="aa" value="123" />
<script>
var aa;
alert(aa.value); // 这就不行了, 你 var 了一个 aa, 外面的那个 input 就被隐藏啦.
</script><input id="aa" value="123" />
<script>
alert(aa.value); // 即使先 alert, 再 var , 也不行! 因为 jscript 解释时,把声明提到了 块首
var aa;
</script>----------------------------------------------------------------------
像下面这样的脚本var a = 1;
var b = 2;
var c = 3;
var d = 4;
var e = 5;
// ...解释执行时,相当于var a, b, c, d, e; // ... 声明,都被提到前面来
a = 1;
b = 2;
c = 3;
d = 4;
e = 5;
// ...