为什么在javascript函数上设置函数参数默认值是这样的工作?

时间:2018-04-19 10:46:27

标签: javascript

像这样的javascript代码

function foo (x = 2,y = function(){return x;}){
   var x = 5;
   console.log(y())  // 2
}
foo(); 

控制台输出2,它看起来像参数有自己的范围,关闭参数x .until我看到这个结果:

function foo (x = 2,y = function(){return x;}){
  x = 5;
  console.log(y()) // 5  WTF?
}
foo();

控制台输出5.这真的让我感到困惑。关键字var是否重新声明并被忽略?但看起来不像这样。 在这种情况下,这段代码如何真正起作用?

1 个答案:

答案 0 :(得分:0)

使用x / var / let时,const的范围已本地化。

在参数列表中y定义y = function(){return x;}时,在定义表达式时定义xy的范围功能 foo

在使用var时,x的范围会再次本地化,而较旧的y仍会保留较早的x绑定。

即使将参数传递给foo

,也不会覆盖这些值
foo(1,function(){});
如果5未被使用,

仍会输出var(并且变量的范围未被定位,因此使用新值),但{{1}该值被覆盖,它给出了var