据我所知,Javascript不编译,它只运行。所以应该没有编译时错误,只有运行时错误。那么为什么这个代码不工作?运行一个未定义参考的函数
function show() { console.log(x); }
(function() {
var x = 42;
show();
})()
我的问题不在于如何使此代码更好;我意识到这是不好的代码,我已经知道如何解决它(见下文)。
我的问题是,为什么我会得到一个未捕获ReferenceError
?如果Javascript只在运行时抛出错误,它应该知道x == 42
在它调用show()
的时候,它在匿名函数中,是否正确?
工作代码:
(function() {
var x = 42;
function show() { console.log(x); }
show();
})()
工作的代码,最好的选择:在JS
function show(y) { console.log(y); }
(function() {
var x = 42;
show(x);
})()
'show()'范围内不存在'x',它在匿名函数的范围内声明。是的,匿名函数有自己的范围。对于您的相关问题 - Javascript是一种解释型语言,您不需要编译它,但是在现代JS引擎中,随着代码的解释,它们会将其编译为机器代码。 – skyline3000