変数には、グローバル変数とローカル変数の 2 つのスコープがあります。この記事では主に、JS の変数スコープの詳細な分析について説明し、皆様のお役に立てれば幸いです。
最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的: var n=10; function f1(){ console.log(n); } f1(); // 输出10,说明全局变量n在函数内部被读取
局部变量:在函数内部声明的变量。函数内部的变量,外部无法读取。 function f1(){ var n=10; } console.log(n); // 没有定义,说明函数内部的变量,外部无法读取。
for(var i =0;i<10;i++){ } console.log(i)
js、このコードでは何が出力されると思いますか?答えは 10 です。 ES5 ではグローバル スコープと関数スコープのみで、ブロック スコープの機能は実装できません。以下のコードを見てください:
(function(){ for(var i =0;i<10;i++){ } })() console.log(i)
答えは 1 です。この書き方は即時呼び出し関数式 (IIFE) と呼ばれます。これは実際に、このスコープで宣言された変数はブロック内でのみ有効であり、ローカル スコープを作成することはできません。外部からアクセスできます。この書き方の利点は、グローバル変数を汚さないことです。
ここでもう 1 つ言及したいのは、ES5 では変数の宣言が厳密ではないということです。a=10 を直接使用してグローバル変数を宣言できます。 以下のように: r
a=10;console.log(a)
var a=undefined;a=10;console.log(a)
a=10; (function(){console.log(a)var a=1; })();
var a=undefined; a=10; (function(){var a=undefined; console.log(a) a=1; })();
for(let i=0;i<10;i++){ }console.log(a)
a=3let a =10;alert(a)
var a, b; (function () { console.log(a);// undefined console.log(b);// undefined var a = b = 0;// (1) console.log(a);// 0 console.log(b);// 0 })(); console.log('window', a);// window undefined console.log('window', b);// window 0
JavaScriptの変数スコープ、メモリ、DOMリークおよびその他の問題の例の詳細な説明
以上がJSの変数スコープの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。