在这个例子中,我看不出为什么这个函数控制台记录字符串“outside”而不是“inside f1”。
我认为f1函数将一个名为“x”的局部变量分配给字符串“f1”,然后在调用f1函数时,控制台记录变量“x”,它将显示“inside f1”不是“外面”;但是,如代码所示:
var x = "outside";
var f1 = function(){
var x = "inside f1";
};
f1();
console.log(x);
//outside
为什么它显示“外部”而不是“内部f1”?
答案 0 :(得分:0)
var
关键字将在当前范围上创建变量的新实例。 Javascript(从ES5开始)仅在函数内创建新的范围。如果变量x
存在于函数外部并且您拥有行var x = 'something'
,那么您将创建仅存在于该范围内的x
版本。它会覆盖父作用域中的x
。如果您不使用var
关键字,则不会创建本地x
,而是在父作用域中查找x
,最终在{{{{}}上创建变量x
1}}如果没有找到对象。
所以:
window
和
var x = "outside";
var f1 = function(){
var x = "inside f1";
};
f1();
console.log(x);
//outside