【发布时间】:2013-11-06 16:34:01
【问题描述】:
这是我在学习 javascript 范围时发现的一些有趣的东西。
代码
var foo = "This is a global variable.";
var bar = function() {
alert(foo);
foo = "Value has been modified";
}
bar();
alert(foo);
这给出了你认为你会得到的正常响应,但如果我改变这一行:
来自:
foo = "Value has been modified";
收件人:
var foo = "Value has been modified";
我得到 foo 的 undefined 值,这是为什么呢?既然函数是全局作用域,怎么不接受前面的var关键字?
编辑
现在我基本上明白了发生了什么,功能栏中的var foo 将获得最重要的因为 var 关键字并被提升,但它会被提升没有值它已被分配。
【问题讨论】:
-
"我得到一个未定义的 foo 值,这是为什么呢?" -- 不,你不知道jsfiddle.net/up8bX
-
移动变量栏并不能解决这个问题。
-
阅读 ECMA-262 关于entering an execution context 的内容可能会有所帮助,尤其是declaration binding instantiation。
标签: javascript