JavaScriptグローバルスコープ、関数スコープの詳細な解読


JavaScriptグローバルスコープ、関数スコープの詳細な解読
グローバルスコープ:
スコープとは、変数のライフサイクルのことです.
    :
              。
               。
  JavaScript           。
グローバル変数は、使いやすいですが、非常に怖いです.これはすべてのプログラマが公認している事実です.
明示的な宣言:
キーワードを伴うvarの声明.
<script type="text/javascript">

    var testValue = 123;

    var testFunc = function () { console.log('just test') };

    /**---------         window    ------------**/

    console.log(window.testFunc)		// ƒ () { console.log('just test') }

    console.log(window.testValue)		// 123
    
</script>
実は、私たちが書いた関数はパッケージを通しないと、グローバル変数にもなります.彼のライフサイクルはグローバルスコープです.
暗黙の宣言:
宣言キーを持たない変数は、JSがデフォルトでグローバル変数を宣言します.
<script type="text/javascript">

    function foo(value) {

      result = value + 1;	 //     var   

      return result;
    };

    foo(123);				// 124
    
    console.log(window.result);			// 124 <=      window      
    
</script>
今、変数resultはwindowの対象にマウントされました!!
関数のスコープ:
関数のスコープ内では、外部は閉鎖されています.外部から直接関数内部のスコープにアクセスできません.
function bar() {
  var testValue = 'inner';
}

console.log(testValue);		//   :ReferenceError: testValue is not defined
returnを通じて関数内部変数にアクセスします.
function bar(value) {
  var testValue = 'inner';
  
  return testValue + value;
}

console.log(bar('fun'));		// "innerfun"
関数は工場のように、内部で加工されたものを入力して加工してくれます.
クローズドで関数内部変数にアクセスします.
function bar(value) {
  var testValue = 'inner';
  
  var rusult = testValue + value;
  
  function innser() {
     return rusult;
  };
  
  return innser();
}

console.log(bar('fun'));		// "innerfun"
クローズドについては、この文章ではあまり説明しません.なぜなら、クローズドを説明するには、この文章と同じ長さが必要です.
直ちに関数を実行します.
これは実用的な関数であり、多くのライブラリが大域作用領域を分離し、個々の関数作用領域を形成している.
<script type="text/javascript">

    (function() {

      var testValue = 123;

      var testFunc = function () { console.log('just test'); };

    })();

    console.log(window.testValue);		// undefined
    
    console.log(window.testFunc);		// undefined
    
</script>
その中の小包の内容は自動的に実行できます.グローバル変数の影響をよくなくすことができます.