javascript - jswindow的问题
迷茫
迷茫 2017-04-11 12:36:20
[JavaScript讨论组]
(function(){
a = 5;
alert(window.a);
var a = 10;
alert(a);
})();

请问为什么会输出undefined, 10

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
PHP中文网

这段代码的最终是这样执行的。

(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...

天蓬老师

闭包里的变量无法被外部访问。这就是闭包的一个特点。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号