2016-06-28 14 views
2
var salary = "1000$"; 

(function() { 
    console.log("Original salary was " + salary); //1000$ 

    salary = "5000$"; 

    console.log("My New Salary " + salary); //5000$ 
})(); 

(function() { 
    console.log("Original salary was " + salary); //undefined ?? 

    var salary = "5000$"; 

    console.log("My New Salary " + salary); //5000$ 
})(); 

第1および第3のコンソールログで異なる出力が表示されるのはなぜ、どのようにですか?自己呼び出し関数でvarキーワードのない変数はどのように機能しますか?

+0

ヒント:関数が定期的に宣言されて呼び出された場合とまったく違う... – Bergi

答えて

2

これは、2番目の生命維持機能.IN変数ホスティングによるもので、すでに給与変数を宣言している、それは実際にあなたのグローバルな給与の機能関数の先頭に移動して影が薄い

JavaScriptのconvrts .seeのように、このコードコード。

var salary = "1000$"; 

    (function() { 
     console.log("Original salary was " + salary); //1000$ 

     salary = "5000$"; 

     console.log("My New Salary " + salary); //5000$ 
    })(); 

    (function() { 
     var salary ; 
     console.log("Original salary was " + salary); //undefined ?? 

     // get move to opvar salary = "5000$"; 

     salary = "5000$"; 

     console.log("My New Salary " + salary); //5000$ 
    })(); 
1

トップラインはsalaryというグローバル変数を作成します。 2番目の関数の範囲内には、salaryというローカル変数があります。つまり、2番目の関数では、グローバル変数にそのようにアクセスすることはできず、ローカル変数はまだ設定されていないので、設定されている行までは実際には未定義です。

関連する問題