無料学習の推奨事項:JavaScript ビデオ チュートリアル
# #JavaScript のスコープとクロージャ
JavaScript では、スコープとクロージャを明確にしておかないと、コードを書くときに多くの問題が発生しますので、今日はスコープとクロージャについてまとめてみます。スコープ
スコープは主にグローバル スコープとローカル スコープに分かれており、ローカル スコープは関数スコープとブロック レベル スコープに分かれています。グローバル スコープ
中括弧 ({}) の外側の変数または関数を定義すると、それはグローバル変数となり、その関数のドメインはグローバルになります。範囲。let a = 1function fun1 () { console.log(a) // 结果:1 function fun2 () { console.log(a) // 结果:1 } fun2()}fun1()console.log(a) // 结果:1
同じレベルのスコープ内で、let または const を使用して変数を宣言すると、同じ名前の 2 番目の変数がエラーを報告し、var を使用して変数を宣言すると、前の変数がエラーを報告することに注意してください。上書き;
ローカル スコープ
関数または中括弧 ({}) 内で変数を定義すると、それはローカル スコープの変数になります。そのレベルのスコープの下位レベルのスコープで使用されます。function fun1() { let a = 100 console.log(a) // 结果: 100 function fun2 () { console.log(a) // 结果:100 } fun2()}fun1()console.log(a) // 结果: a is not defined
自由変数の検索
現在のスコープで定義されていないが使用されている変数は、自由変数です。その実行ルールは何ですか?自由変数は、見つかるまでレイヤーごとに上位スコープまで検索されます。グローバル スコープが見つからない場合は、エラー「xx が定義されていません」が報告されます。
let a = 100function fun1 () { let a1 = 2 function fun2 () { let a2 = 3 let a = 0 function fun3 () { let a3 = 4 a++ console.log(a + a1 + a2 + a3) // 结果: 10 } fun3() } fun2()}fun1()console.log(a) // 结果: 100
クロージャー
クロージャーはスコープによって適用されます。この場合、主に 2 つの表現があります: (1) 関数はパラメータとして渡されます。 (2) 戻り値として関数が返されます。/** * 函数作为返回值 */function create () { const a1 = 100 return function () { console.log(a1) }}const fn = create()const a1 = 200fn() // 结果: 100/** * 函数作为参数 */function print (fn) { const a2 = 300 fn()}const a2 = 400function fn1 () { console.log(a2)}print(fn1) // 结果: 400
クロージャの実践的な応用シナリオ
(1) シンプルなキャッシュ ツールの作成など、データの非表示(2) アンチシェイクとスロットル機能
関連する無料学習の推奨事項:javascript(ビデオ)
以上がJavaScript のスコープとクロージャの導入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。