0

以下のスクリプトを書き、スクラッチパッドで実行しました。

baz();

var baz = function(){
  console.log("Hello World");
}

上記のスクリプトを実行しようとすると、以下のような例外が発生しました。私は知っています、この表現は、巻き上げが関数式に対して有効でないためです。

/*
Exception: TypeError: baz is not a function
@Scratchpad/1:1:1
*/

ここで、関数名 'baz' を 'say_hello' に置き換え、アプリケーションを再実行しました。例外なく正常に動作しています。この動作には何か理由がありますか?

say_hello();

var say_hello = function(){
  console.log("Hello World");
}

4

1 に答える 1

1

say_hello();

function say_hello(){
  console.log("Hello World");
}

これは、例外なく実際に正常に機能しているものです

その理由は:

JavaScript は初期化ではなく、宣言 (変数と関数の宣言) のみを巻き上げます

使用後に変数を宣言して初期化すると、値は未定義になります。例えば:

console.log(num); // Returns undefined 
var num;
num = 6;

使用後に変数を宣言し、事前に初期化すると、値が返されます。

num = 6;
console.log(num); // returns 6
var num;

詳細情報:宣言のみが巻き上げられる

于 2018-10-06T02:26:57.010 に答える