JavaScriptコア技術開発読書ノートの解読(第五章)

2156 ワード

第五章作用ドメインと作用ドメインチェーン
1.スコープ
一般的な作用域は二つあり、大域作用域と関数作用域がある.ES 6にブロックレベルのスコープが追加されました.グローバルスコープで宣言された変数と関数はコードのどこにでもアクセスできます.グローバルスコープには、次の3つのケースがあります.1)グローバルオブジェクトにある属性と方法
window.name;
window.location;
window.top;
……
2)最外層で宣言された変数と方法
var foo = function () {}
var str = 'out variable';
var arr = [1, 2, 3];
function bar () {}
3)非厳密モードでは、関数のスコープに定義されていませんが、直接複製された変数と方法(読めませんでした)
function foo () {
  bar = 20;
}
function fn () {
  foo();
  return bar + 30;
}
fn(); // 50
関数のスコープ内で宣言された変数と方法は、他のインコヒーレントなスコープによってアクセスすることができず、下の階層の副作用ドメインによってのみアクセスできます.
function foo () {
  var a = 20;
  var b = 30;
}
foo();
function bar () {
  return a + b;
}
bar(); // Uncaught ReferenceError
作用域の制限のため、barでは変数aとbにアクセスできないので、関数実行報Unicagt ReferenceErrを実行します.
function foo () {
  var a = 20;
  var b = 30;
  function bar () {
    return a + b;
  }
  return bar();
}
foo(); // 50
barにおける作用域はfooの自己作用領域であるため、変数aおよびbにアクセスすることができる.ブロックレベルのスコープはES 6によって追加されたletおよびconstによって表される.
function f1 () {
  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}
上の関数には二つのコードブロックがあり、変数nを宣言し、実行後に5を出力します.これは外層コードブロックが内層コードブロックの影響を受けないことを表しています.二回ともvar定義変数nを使用すれば、最後に出力される値は10です.
2.直ちに関数を実行する(Immediately Invoked Function Expression、IIIIIIIIIIIIFSE)
ブロックレベルのスコープが出現する前に、IIIIFEを使用してブロックレベルのスコープをシミュレートします.
var a = 2;
(function foo () {
  var a = 3;
  console.log(a); // 3
})();
console.log(a); // 2
関数はペアの括弧内に含まれているので、末尾にもう一つの括弧を加えることで、すぐにこの関数を実行することができます.IIIIIFEのもう一つのムチの階段の使い方は、それらを関数として呼び出してパラメータを渡すことです.
var a = 2;
(function IIFE (global) {
  var a = 3;
  console.log(a); // 3
  console.log(global.a); // 2
})(window);
console.log(a); // 2
私たちはwindowオブジェクトの参照を転送しますが、パラメータをglobalと名づけましたので、コードスタイルでグローバルオブジェクトに対する引用は「グローバル」という文字がない変数を引用するよりも明らかになりました.ブロックレベルのスコープの知識をもっと知りたいです.ここをクリックしてください.
3.作用ドメインチェーン
作用地域チェーンの知識については、本の説明はあまり詳しくないです.私もよく分かりません.後でまた追加します.
以上はJavaScriptの核心技術に対して開発して第五章の読書ノートを解読するので、コードワードは容易ではありませんて、作者の著作権を尊重して下さい.By BeLLESS 2018.6.30:11