为什么此控制台以此范围示例中的方式记录输出?

时间:2016-04-09 02:23:51

标签: javascript scope

在这个例子中,我看不出为什么这个函数控制台记录字符串“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”?

1 个答案:

答案 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