2017-12-19 6 views
-2

xはfn関数の後に宣言されますが、その値を返します。なぜfnは未定義を返しませんでしたか?あなたのdoWork()関数の内部Javascriptはスコープに巻き上げたり、どこに作成したりできますか?

function doWork(){ 
 

 
    let fn = function(){ return x; } 
 
    let x = 2; 
 

 
    return fn(); 
 

 
} 
 

 
console.log(doWork()); // 2

+0

範囲はFN 'のでJS https://www.w3schools.com/js/js_scope.asp – asosnovsky

+1

でどのように機能するかをお読みください() 'が' * 'の後に*呼び出されます。 –

+0

'let'はスコープ内に変数を作成します。スコープ内には順序はありません。「一時的なデッドゾーン」です。これがうまくいかなければ、それは大変迷惑になるでしょう。 – Ryan

答えて

1

、まずあなたが機能を設定し、fnに割り当てる - この機能はまだ起動されないです。 x2と定義します。 の後にfn()を呼び出す場合は、return fn()を呼び出します。

JavaScriptは、fn()を参照するときに、xが定義されているため、fn()return xに正しくなります。

これは以下で見ることができます。

function doWork() { 
 
    let fn = function() { 
 
    return x; 
 
    } 
 
    let x = 2; 
 
    return fn(); 
 
} 
 

 
console.log(doWork()); // 2

関連する問題