からの引用
変数の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;