2016-03-25 10 views
1

閉鎖です:このクロージャはグローバルスコープですか?

function xPlusPlus() { 
    var x = 0; 
    return function() { 
    console.log(x++); 
    } 
} 

var inner = xPlusPlus(); 
inner();// 0 
inner();// 1 
inner();// 2 

しかし、あまりにも閉鎖ですか?

var x = 0; 

function xPlusPlus() { 
    console.log(x++); 
} 
xPlusPlus();// 0 
xPlusPlus();// 1 
xPlusPlus();// 2 

私は他のxPlusPlus関数の宣言は、それがグローバルスコープに取り付けたクロージャを作成する意味グローバルスコープ、であるあなたのスニペットを包むそこには何もないと仮定すると答え

+0

YESでxをインクリメントしてみましょう!どのようなスコープがその動作を引き起こしているかは関係ありません。 –

+0

「クロージャ」という用語を「すべてのアウタースコープのライブスナップショット」と考えてください。これには、グローバルスコープも含まれます。また、関数はクロージャではなく、作成します。 – Tomalak

+0

@RajaprabhuAravindasamyありがとう! –

答えて

1

のために非常に感謝するでしょう。

function xPlusPlus() { 
    var x = 0; 
    return function() { 
    console.log(x++); 
    } 
} 

var inner = xPlusPlus(); 
inner(); 

差が

  • 最初場合xに第二ケースxグローバル

、これは実行会話最初のケースであるxPlusPlus範囲に

  • であるということです

    console.log(x++);: 'ちょっとした匿名関数、あなたは変数xを知っていますか?'

    匿名機能: 'いいえ、レベルアップ!'

    ラインconsole.log(x++);: 'xPlusPlus機能ねえ、あなたは変数xを知っていますか?'

    xPlusPlus機能:「はい、私はあなたのために持っています!

    ラインconsole.log(x++);:「クール!私は1でxをインクリメントしてみましょう '

    END


    これで二ケース実行会話:

    var x = 0; 
    
    function xPlusPlus() { 
        console.log(x++); 
    } 
    xPlusPlus(); 
    

    ラインconsole.log(x++);:' ねえ機能xPlusPlus、あなたが変数を知るx? '

    機能xPlusPlus:「いいえ、レベルアップして、グローバルスコープに乗りこなしてください!」

    ラインconsole.log(x++);:「global scope機能ねえ、あなたは変数xを知っていますか?'

    global scope:'はい私はあなたのために持っています! '

    ラインconsole.log(x++);:「クール!私は1」

    END

  • +0

    Большоеспасибо、Олег! :) –

    +1

    :) vsegda pozhaluysta – oKonyk

    関連する問題