var a=1;
function f(){
a=2;
}
f();
console.log(a); //a=2;
function f(){
var a=1;
if(a){
a=2;
}
}
f();
console.log(a); //undefined
function foo() {
var x = 1;
if (x) {
(function () {
var x = 2;
}());
}
console.log(x);// 为啥x还是=1
}
先不说楼上那个问题。
来咱们把你的第三段代码改一下,
function foo() {
var x = 1;
if (x) {
(function () {
x = 2;
}());
}
console.log(x);// 试试还是1么
}
而在f()中对全局变量重新赋值不会影响到全局作用域。 楼主,你说的这句话是错的,在函数作用域中对全局变量重新赋值是会影响到全局作用域的。所以你给出的第一个例子的输出的a=1这个答案是错的,正确输出是a=2。
var a=1;
function f(){
a=2;
}
f();
console.log(a); //a=2;
//因为函数内没有声明局部变量,直接对变量进行赋值操作,所以会向window下寻找变量a再进行赋值操作
function f(){
var a=1;
if(a){
a=2;
}
}
f();
console.log(a); //a is not defined
//这里的a都是局部变量,console.log(a)里要输出的是全局变量a,但是全局变量没有声明,所以报错