var x = 0; var test = function(){ x=1; } test(); alert(x); function test(){ x = 2; } test(); alert(x);
我试了一下输出1,1第二个函数没有执行,请大神讲讲
认证0级讲师
即涉及到hoisting机制,也涉及到函数声明和函数表达式的区别:
hoisting机制我就不讲了,详情看链接。 这道题有两个test函数,前者是函数表达式,后者是函数声明,对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析。 所以最终Js其实是这样执行代码的,用函数表达式创建的函数会把已编译好的函数声明创建的同名函数覆盖,相当于变量的重新赋值:
函数声明提前...请这样看这道题:
var x, test; function test() { x = 2; } test = function() { x = 1; } test(); alert(x); test(); alert(x);
传送门http://segmentfault.com/q/1010000002589542
即涉及到hoisting机制,也涉及到函数声明和函数表达式的区别:
hoisting机制我就不讲了,详情看链接。
这道题有两个test函数,前者是函数表达式,后者是函数声明,对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析。
所以最终Js其实是这样执行代码的,用函数表达式创建的函数会把已编译好的函数声明创建的同名函数覆盖,相当于变量的重新赋值:
函数声明提前...请这样看这道题:
传送门
http://segmentfault.com/q/1010000002589542