私は JavaScript の専門家ではありませんが、次のようなコードを見つけました
a();
function a(){
alert('a');
}
そして、それが機能することに驚きました (そのようなものは Python では機能しないと思います)。a
関数が作成される前に実行できないことを期待していました。インタープリターはどのように機能し、宣言の前に関数を呼び出すことができるのはなぜですか?
私は JavaScript の専門家ではありませんが、次のようなコードを見つけました
a();
function a(){
alert('a');
}
そして、それが機能することに驚きました (そのようなものは Python では機能しないと思います)。a
関数が作成される前に実行できないことを期待していました。インタープリターはどのように機能し、宣言の前に関数を呼び出すことができるのはなぜですか?
これは、変数の巻き上げが原因で発生します。詳細については、この回答を参照してください
これに関するドキュメント: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting
次のように入力すると、機能しません。
a();
a = function(){
alert('a');
}
関数やオブジェクト内にあるコードは、その関数やオブジェクトが呼び出されるたびに実行されます。ページのヘッドまたはボディに直接あるコードから呼び出された場合、実行順序でのその場所は、関数またはオブジェクトが直接コードから呼び出された場所になります。
こちら のリファレンスを参照してください。
そして、私たちの場合、ここで例を見ることができるように、関数はエラーを出します。
これは、関数 a() が関数宣言構文で宣言されており、スクリプトが解析された直後に関数宣言が実行されるためです。他の構文、関数式では、次のようになります。
var b = function(){
alert('b');
}
動作しません (例を参照)。
詳細: http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/