スコープと関数スコープ変数JS

からの引用

変数の1.適用範囲(差分VARを聞かせて)

それは、現在のドキュメント内の任意の他のコードによってアクセスすることができるので、関数宣言外部変数は、グローバル変数と呼ばれます。それだけで、現在の関数内でアクセスすることができるので、関数内で宣言された変数では、ローカル変数と呼ばれます。

JavaScriptの6 ECMAScriptのは、スコープをブロックしていない前に、文のに対し、変数宣言文ブロックが機能ブロック(またはグローバルスコープ)の文になりますローカル変数。ので、例えば、次のコードは、コンソール5に出力される  x 範囲がステートメントである  x 関数(またはグローバルスコープ)は、なく  if ブロック。

if (true) { var x = 5; } console.log(x); // 5

如果使用 ECMAScript 6 中的 let 声明,上述行为将发生变化。
if (true) { let y = 5; } console.log(y); // ReferenceError: y 没有被声明


2. 变量的提升
含义为: 先使用变量稍后再声明变量而不会引发异常, 但是提升后的变量将返回undefined值
变量提升即相当于:
var x;
console.log(x); // undefinded

示例:
/**
 * 例子1
 */
console.log(x === undefined); // true var x = 3; /** * 例子2 */ // will return a value of undefined var myvar = "my value"; (function() { console.log(myvar); // undefined var myvar = "local value"; })();

上記の例は、(VAR xに対応する、にconsole.log(x))を書き込むことができます
/**
 * 例子1
 */
var x;
console.log(x === undefined); // true x = 3; /** * 例子2 */ var myvar = "my value"; (function() { var myvar; console.log(myvar); // undefined myvar = "local value"; })();

そのため、可変リフトで、すべての機能varのステートメントは、できるだけ多くの機能の上部付近に配置する必要があります。この習慣は大幅にあなたのコードの明瞭さを向上させます。

 

しかし、可変ブロックレベルのスコープを聞かせて、可変リフトは存在しません。

ECMAScriptの6では、あろう(CONST)させ持ち上げないコードブロックの先頭に変数を。したがって、変数宣言の前に変数は、参照エラーをスローすることを基準(にReferenceError)。この変数は、変数は、これまでに宣言されるまで、彼は「一時的なデッドゾーン」にある最初からブロックです。

console.log(x); // ReferenceError let x = 3;
 

おすすめ

転載: www.cnblogs.com/yanjijiang/p/11294692.html