刚刚发现一个莫名其妙的javascript特性,求大神解释
刚发现一个莫名其妙的javascript特性,求大神解释
如上,请问为什么上面那种情况能读到全局变量的 foo,但读不到值。第二种情况却可以呢?
------解决思路----------------------
所以在第一个方法当中,两个foo是完全不相同的。
而第二个方法当中,因为在当前作用域找不foo这个变量,会慢慢往外面一层找,直到找到全局的foo,这时foo是叫做自由变量。如果找完全局都没有发现foo这个变量,那么就会在该方法里面自己创建一个变量,所以说js里面就算你不声明变量,只要使用了它会先往外层找,找不到了就在当前作用域自己创建。
var foo = 1;
(function (){
document.write(foo); //undefined,也就是读不到 全局变量的 foo=1 的值
var foo = 2;
document.write('<br>');
document.write(foo); // 2
})();
//-------------------------------------------
var foo = 1;
(function (){
document.write(foo); // 1,也就是读得到 全局变量的 foo=1 的值
})();
如上,请问为什么上面那种情况能读到全局变量的 foo,但读不到值。第二种情况却可以呢?
------解决思路----------------------
所以在第一个方法当中,两个foo是完全不相同的。
而第二个方法当中,因为在当前作用域找不foo这个变量,会慢慢往外面一层找,直到找到全局的foo,这时foo是叫做自由变量。如果找完全局都没有发现foo这个变量,那么就会在该方法里面自己创建一个变量,所以说js里面就算你不声明变量,只要使用了它会先往外层找,找不到了就在当前作用域自己创建。