7
私はいつもブラウザが文字列によって上から下の文字列からJavaScriptコードを実行すると考えてきました(あなたはまあスクリプト言語からこの動作を期待しています)。しかし、明らかにそれはここの場合ではありません。JavaScriptはどのように解釈されますか?
//
<script>
test();
function test() { alert('test'); }
</script>
完璧に動作しますが、私は、変数としての機能を宣言した場合、それは「キャッチされないにReferenceError:テストが定義されていない」で失敗し
<script>
test();
var test = function() { alert('test'); }
</script>
したがって、javascriptエンジンは上から下にコードを実行しないことがあります。最後に宣言されていても、何らかの形で関数をプリロードすることができます。 どのように正確に動作し、なぜですか?
私はfunction(){}がスコープの上部に移動する特別なケースだと思います。私は間違っている可能性があります。 –
* [AST](http://en.wikipedia.org/wiki/Abstract_syntax_tree)のようなものに実行される前に完全に解析されます。このため、ソースのさらに下の行に「構文エラー」が表示されます。 – Matt
トップの回答を見てください: http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname – viper