通過jsHint傳遞這樣的代碼:js提示「函數未定義」問題,函數聲明的順序很重要?
var A = function (spec) {
"use strict";
var a = function() {
return b();
};
var b = function() {
return 5;
};
a();
};
返回此錯誤:
Line 4: return b();
'b' is not defined.
我理解這可能與 「提升」 爲解釋在這裏做:JavaScript function order: why does it matter?
但是,以下代碼返回相同的錯誤:
var A = function (spec) {
"use strict";
function a() {
return b();
}
function b() {
return 5;
}
a();
};
如果我理解正確,至少第二個代碼片段不應該返回錯誤。我錯了嗎?
即使考慮起升機構,我還是不明白爲什麼第一個代碼段應該是錯誤的。函數a
僅在函數b
被定義後才被調用,所以b
將在a
的關閉中。我的代碼是錯的還是jsHint錯了?
據我所知,這個問題是純學術性的,因爲代碼將按預期在所有的瀏覽器。不過,我想知道爲什麼jsHint拋出一個錯誤。
我不知道爲什麼jsLint(及其fork)忽略函數聲明提升。 – SLaks
我認爲這是由他們的github中的幾個問題:[61](https://github.com/jshint/jshint/issues/61),[47](https://github.com/jshint/jshint/issues/47),[29](https://github.com/jshint/jshint/issues/29)。 [29](https://github.com/jshint/jshint/issues/29)於2011年3月關閉,並表示該問題已修復(無論如何都在其主分支中)。 – jonemo