據我所知,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