'use strict';
function foo() {
var x = 1;
x = x + 1;
}
x = x + 2; // ReferenceError! 无法在函数体外引用变量x
1.2 不同函数同名变量
'use strict';
function foo() {
var x = 1;
x = x + 1;
}
function bar() {
var x = 'A';
x = x + 'B';
}
不同函数内的同一个变量是可以的,互相独立,互不影响。
1.3 外部函数变量与内部函数变量重名
function foo() {
var x = 1;
function bar() {
var x = 'A';
console.log('x in bar() = ' + x); // 'A'
}
console.log('x in foo() = ' + x); // 1
bar();
}
foo(); // x in foo() = 1 x in bar() = A
内部函数变量会屏蔽掉外部函数变量的值。
二、变量提升
'use strict';
function foo() {
var x = 'Hello, ' + y;
console.log(x);
var y = 'Bob';
}
foo(); // Hello, undefined
JavaScript 会扫描整个函数体,然后将所有声明的变量提升到函数的顶部,此时 y 被声明因此不会报错,但是 y 没有被赋值,因此值是 undefined。