(function(){
a = 5;
alert(window.a);
var a = 10;
alert(a);
})();
请问为什么会输出undefined, 10
(function(){
a = 5;
alert(window.a);
var a = 10;
alert(a);
})();
请问为什么会输出undefined, 10
变量提升,a始终是局部变量,这里没有构成闭包,和闭包没有任何关系。
// 代码相当于
(function(){
var a; // 声明局部变量a
a = 5;
alert(window.a); // 全局作用域中没有a, 所以是undefined
alert(a); // 局部变量被赋值为5, 弹出5
a = 10;
alert(a); // 局部变量被赋值为10了,所以为10
})();
alert(a); // 多加一步, undefined,证明全局作用域确实没有a
如果你想让a成为全局变量,改一下代码
(function(){
a = 5;
alert(window.a);
a = 10; // 去掉var,这样就不会变量提升了
alert(a);
})();
首先这是一个自执行函数,关于自执行函数可以看这: 自执行函数http://blog.csdn.net/limlimli...
然后这里形成了一个闭包.
如果不是在闭包中,a = 5 可以理解为是在 window 对象中的,
在闭包中,这个 a 只作用于这个函数体内, 所以你访问 window.a 是undefined。
在新的 ES6中,引入了let, 关于闭包和作用域,强烈推荐你看看 阮一峰写的es6 入门, let ,const 那一章。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答868 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
这段代码的最终是这样执行的。
这样看应该就明白了吧,所以a应该始终只是一个局部变量。
我一开始也觉得a=5那一句应该会让a变成全局变量的,,