- 字句のステージ
- 字句の
- ソースコードチェックキャラクタ
- 字句スコープ
- どこの書き込みスコープ変数をブロックし、決定するコードを書くとき
- スコープ検索は、識別子の最初の試合で停止します
- だから、同じ名前の識別子が上書きされます
- スコープは常に最も内側の範囲から開始するランタイムで
- 次第に外側にスコープチェーンに沿って
- 調べるために沿ってスコープチェーンを見つけることができない、変数のための最も内側のスコープで始まり、ランニング、要約すると、まずOK、一致する識別子を見つけます
- 字句の
- レキシカルスコープの変更
- evalの
function foo(str, a) { eval(str); console.log(a, b); } var b = 2; foo("var b = 3;", 1); // 1, 3
- 無駄にstrictモードでのeval
function foo(str) { "use strict"; eval( str ); console.log( a ); // ReferenceError: a is not defined } foo( "var a = 2" );
- strictモードでは、evalのは、実行時に、独自のレキシカルスコープを持っています
- タグ文字列の宣言文を含むevalの(..)は、挿入レキシカルスコープのランタイムを変更することがあり
- とともに
var obj = { a: 2, b: 3 }; function fo(obj) { with (obj) { b = 5; } } var o = { b: 33 }; var p = { a: 23 }; fo(o); console.log(o.b); // 33 fo(p); console.log(p.b); // undefined
- Oオブジェクトには属性があり、属性BのPのないオブジェクトは、プロパティを作成しません。
- 対処するためのスコープなどのオブジェクトを参照すると声明、オブジェクト識別子スコープの属性として、新しいランタイムレキシカルスコープを作成します。
- evalのコンパイル時のエンジンスコープ効果の最適化と、それが遅くを開始します。
- evalの
- スコープと機能ブロックスコープ
内部非表示の実装
最小権限の原則(最小限の露出の原則)
- 最小限の露出に必要な内容。
だから、すべての変数と関数はグローバルスコープで宣言されていません
function doSomething(a) { b = a + doSomethingElse(a * 2); console.log(b * 3); } function doSomethingElse(a) { return a - 1; } var b; doSomething(2); // 15
Bの変数と関数doSomethingElseは()関数のdoSomething()プライベート・コンテンツ、外部スコープへのアクセスは、関数内に隠さプライベートコンテンツとなり、危険なことがあります。
function doSomething(a) { var b; function doSomethingElse(a) { return a - 1; } b = a + doSomethingElse(a * 2); console.log(b * 3); }
隠された利点
字句スコープ
おすすめ
転載: www.cnblogs.com/wydumn/p/11575435.html
おすすめ
ランキング