var foo = '1',
bar = '2';
console.log(foo, bar, window.foo); //1, 2, undefined
(function(foo){
console.log(foo, bar); //2, 2
})(bar);
Run Code Online (Sandbox Code Playgroud)
关于上面的代码我有两个小问题:
为什么不window.foo定义?默认情况下,并非所有全局变量都附加到窗口对象上吗?
为什么foo ===2封闭内部?我知道我正在bar使用别名传递原始foo内容2,但是在函数范围之外foo仍然存在1.据我所知,原版foo也可以从封闭内部访问."新foo"是否被优先考虑,因为它作为IIFE的论据被传递?
为什么不
window.foo定义?不是所有"全局"变量都自动附加到窗口对象上吗?
是的,全局变量成为属性window,但代码不是在您的小提琴中的全局范围内运行.它在load事件处理程序中运行(请参阅左侧的第二个复选框,它显示"onLoad").它在全球范围内运行:http://jsfiddle.net/GbeDX/1/
为什么
foo === 2关闭里面?[...]据我所知,原版foo也可以从封闭内部访问.
不,它不能.该参数 foo 隐藏变量foo.如果它是一个全局变量,你可以使用它来访问它window.foo.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |