2

私は JavaScript の専門家ではありませんが、次のようなコードを見つけました

a();

function a(){
  alert('a');
}

そして、それが機能することに驚きました (そのようなものは Python では機能しないと思います)。a関数が作成される前に実行できないことを期待していました。インタープリターはどのように機能し、宣言の前に関数を呼び出すことができるのはなぜですか?

4

3 に答える 3

6

これは、変数の巻き上げが原因で発生します。詳細については、この回答を参照してください

JavaScript の「巻き上げ」

これに関するドキュメント: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting

次のように入力すると、機能しません。

a();
a = function(){
  alert('a');
}
于 2013-07-04T10:46:59.253 に答える
1

関数やオブジェクト内にあるコードは、その関数やオブジェクトが呼び出されるたびに実行されます。ページのヘッドまたはボディに直接あるコードから呼び出された場合、実行順序でのその場所は、関数またはオブジェクトが直接コードから呼び出された場所になります。

こちら のリファレンスを参照してください。

そして、私たちの場合、ここで例を見ることができるように、関数はエラーを出します。

于 2013-07-04T10:55:47.403 に答える
0

これは、関数 a() が関数宣言構文で宣言されており、スクリプトが解析された直後に関数宣言が実行されるためです。他の構文、関数式では、次のようになります。

var b = function(){
  alert('b');
}

動作しません (例を参照)。

詳細: http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

于 2013-07-04T10:59:56.897 に答える