我正在努力思考 JavaScript 中引发的引用错误的行为。
在下面的例子中,在第二行抛出一个ReferenceError
,然后执行中断:
var obj = {};
obj.func1 = func2;
alert('Completed');
而在此示例中,代码成功完成,尽管 obj.func1
仍然是 undefined
:
var obj = {};
obj.func1 = func2;
var func2 = function() {
alert('func2');
};
alert('Completed');
我的假设是第二行同样会抛出一个错误,如果不是这样,我会期望 obj.func1
正确引用 func2
,但我一直双盲。那么这里到底发生了什么?
最佳答案
这是由于 Javascript 变量声明“提升”。
用 var
声明的变量在函数中随处可见,因此不存在 Reference Error
。但是,在您执行初始化它的语句之前,它实际上并没有收到它的值。所以你的第二个例子相当于:
var func2;
var obj = {};
obj.func1 = func2;
func2 = function() {
alert('func2');
};
alert('Completed');
在这个重写中,当你对obj.func1
进行赋值时,你可以看到变量存在。但由于它还没有值,您将 undefined
分配给 obj.func1
。稍后分配给 func2
不会改变这一点。
关于javascript - 如果在声明变量之前使用变量,为什么不会抛出 ReferenceError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473439/