2016-08-08 5 views
0

私は驚くべきことに、それは動作しませんhttps://jsfiddle.net/phusick/h4bh2m4y/ホイストは動作しませんか?

fn1('hello'); 
fn2('world'); 

function fn1(message) { 
    console.log('mgs1:', message); 
} 

var fn2 = function(message) { 
    console.log('msg2:', message); 
} 

を巻き上げについてこのjsfiddleコードサンプルつまずい:

Uncaught TypeError: fn2 is not a function

は、そのプログラムに誤りがありますか?

+0

var宣言された関数は、呼び出される前に宣言されなければならず、コード内の任意の場所に名前付き関数を見つけることができます – Icepickle

+2

[JavaScript関数宣言構文:var fn = function(){} vs function fn(){} (http://stackoverflow.com/questions/336859/javascript-function-declaration-syntax-var-fn-function-vs-function-fn) – haim770

答えて

4

機能宣言が呼び出されます。 (function fn1(message) { }

可変宣言が吊り上げられます。 (var fn2

割り当てはであり、は吊り上げられていません。 (fn2 = function(message) { }

5

コードはこれに相当する:

// function declarations are hoisted 
function fn1(message) { 
    console.log('mgs1:', message); 
} 

// variable declarations are hoisted 
var fn2; 

fn1('hello'); 
fn2('world'); 

// assignments to a variable are not hoisted 
fn2 = function(message) { 
    console.log('msg2:', message); 
} 

fn1関数の宣言を掲げています。

変数fn2の宣言が呼び出されます。

fn2変数への割り当ては受け付けられません。

宣言は吊り上げられ、割り当てまたは初期化はされません。

fn2を使用しているような機能割り当ては、fn1などの関数宣言とは異なります。 varで変数への代入は行われず、変数自体の定義だけが呼び出されます。だから、fn2('world')に電話しようとすると、fn2はまだundefinedです。

関連する問題