扫码关注官方订阅号
(function(){ a = 5; alert(window.a); var a = 10; alert(a); })();
请问为什么会输出undefined, 10
业精于勤,荒于嬉;行成于思,毁于随。
这段代码的最终是这样执行的。
(function(){ var a; a = 5; alert(window.a); a = 10; alert(a); })();
这样看应该就明白了吧,所以a应该始终只是一个局部变量。
我一开始也觉得a=5那一句应该会让a变成全局变量的,,
变量提升,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 那一章。
地址在这: http://es6.ruanyifeng.com/#do...
闭包里的变量无法被外部访问。这就是闭包的一个特点。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这段代码的最终是这样执行的。
这样看应该就明白了吧,所以a应该始终只是一个局部变量。
我一开始也觉得a=5那一句应该会让a变成全局变量的,,
变量提升,a始终是局部变量,这里没有构成闭包,和闭包没有任何关系。
如果你想让a成为全局变量,改一下代码
首先这是一个自执行函数,关于自执行函数可以看这: 自执行函数http://blog.csdn.net/limlimli...
然后这里形成了一个闭包.
如果不是在闭包中,a = 5 可以理解为是在 window 对象中的,
在闭包中,这个 a 只作用于这个函数体内, 所以你访问 window.a 是undefined。
在新的 ES6中,引入了let, 关于闭包和作用域,强烈推荐你看看 阮一峰写的es6 入门, let ,const 那一章。
地址在这: http://es6.ruanyifeng.com/#do...
闭包里的变量无法被外部访问。这就是闭包的一个特点。