このコードをjsHintに渡す:
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関数の順序:なぜそれが重要なのですか?
ただし、次のコードは同じエラーを返します。
var A = function (spec) {
"use strict";
function a () {
return b();
}
function b () {
return 5;
}
a();
};
私が正しく理解していれば、少なくとも2番目のコードスニペットはエラーを返さないはずです。私は間違っていますか?
巻き上げメカニズムを考慮しても、最初のコードスニペットが間違っている理由がわかりません。関数は、関数が定義さa
れた後にのみ呼び出されるため、のクロージャになります。私のコードは間違っていますか、それともjsHintは間違っていますか?b
b
a
コードはすべてのブラウザで期待どおりに機能するため、この質問は純粋に学術的なものであることを理解しています。それでも、jsHintがエラーをスローする理由を知りたいのですが。