js用浅的上手快,用深入没过十年八年内功真的不行,丝毫不差于c++和汇编语言, 有很多莫名的诡异不认真测试还真想不到,看下面代码<SCRIPT LANGUAGE="JavaScript">
a();
function a(){
var x=1;
function b(){
document.writeln(x);
var x=2;
document.writeln(x);
}
b();
}
</SCRIPT> 变量x到底是定义还是没定义,到底能不能访问,不是由前面说了算,而是后面说了算,上面输入结果为:undefined 2 也就是说第一个x没找到,那么再改一下
<SCRIPT LANGUAGE="JavaScript">
a();
function a(){
var x=1;
function b(){
document.writeln(x);
document.writeln(x);
}
b();
}
</SCRIPT> 现在输出2 2 也就是两次检查x都找到了,天啊 ,到底认不认识x变量得后面的脸色
a();
function a(){
var x=1;
function b(){
document.writeln(x);
var x=2;
document.writeln(x);
}
b();
}
</SCRIPT> 变量x到底是定义还是没定义,到底能不能访问,不是由前面说了算,而是后面说了算,上面输入结果为:undefined 2 也就是说第一个x没找到,那么再改一下
<SCRIPT LANGUAGE="JavaScript">
a();
function a(){
var x=1;
function b(){
document.writeln(x);
document.writeln(x);
}
b();
}
</SCRIPT> 现在输出2 2 也就是两次检查x都找到了,天啊 ,到底认不认识x变量得后面的脸色
解决方案 »
- (50分在线等!)【js/css实战】 给表格加滚动条(有图有素材)
- js点击图片切换光标自定义ani文件问题
- window.showModalDialog 问题
- 怎么手动设置文本框输入的内容到COOKIE中,就是说下次点文本框时就会下拉列出上次输入的内容
- JavaScript中设置的cookie为什么在PHP中读不出来呢?
- 在iframe中调用 主窗口的函数.
- firefox下如何实现parent.show.innerHTML="ksjdf"
- 我在页面加了个动态增加输入文本框,可是每次增加后都在页面最下面出现!
- seabell(百合心),请进来一下。
- 请教大虾:
- js让相同的id名称的层全部隐藏
- 寻求类似 mBox 的,但是是基于jquery或javascript的
function b(){
document.writeln(x);
var x=2;
document.writeln(x);
}
b();
其他编程语言你按这个逻辑写看看什么结果
2.JS 在执行前会进行类似"预编译"的操作,而且先预声明变量再预定义函数。
此时注意,是声明,不是定义,如:var a = 1; 在预编译中,只是执行了"var a"没有赋值,即在预编译结束时a 为undefined。
3.(注意)并不是先全文编译完在执行,而是块编译,即一个script块中,预编译再执行,然后(按顺序)下一个script块,预编译再执行,但此时上一个块中的数据都是可以用的,但下一个块中的函数,声明的变量都是不可用的。
4.变量没声明就引用,会报错,但对象方法,对象变量没声明,是undefined
5.在函数中变量不声明就赋值,会被认为是全局变量,用var声明后为函数变量
6.在执行函数时时也是先编译后执行,但要注意函数定义中(即大括号中)的代码即使有错只要函数不执行,就不会有影响,但一执行函数,开始函数预编译就会出错。
<SCRIPT LANGUAGE="JavaScript">
document.writeln(a);
var a=0;
</SCRIPT>
执行结果undefine
<SCRIPT LANGUAGE="JavaScript">
document.writeln(a);
a=0;
</SCRIPT>
执行报错
<SCRIPT LANGUAGE="JavaScript">
var a=0;
document.writeln(a);
</SCRIPT>
输出0
看你疯不疯
a();
function a(){
var x=1;
function b(){
document.writeln(x);
var x=2;
document.writeln(x);
}
b();
}
</SCRIPT> 因为a()里面有两个x 的定义,所以第一个指令被摈弃了,等于没有
你修改了之后,只有一个定义式了,所以就都可以被检查到了你可以修改成<SCRIPT LANGUAGE="JavaScript">
a();
function a(){
var x=1;
function b(){
document.writeln(x);
x=2;
document.writeln(x);
}
b();
}
</SCRIPT>