var x = 1;
function foo(x, y = function() { x = 2; }) {
var x = 3;
y();
console.log(x);
}
foo() // 3
x // 1
而去掉var以后:
var x = 1;
function foo(x, y = function() { x = 2; }) {
x = 3;
y();
console.log(x);
}
foo() // 2
x // 1
为什么实例一的y执行完成没有改变任何x的值?
而去掉var输出结果就会改变?
函数声明时设置的默认参数值是在函数调用时计算赋值的,而不是在函数声明时赋值
我们可以看下下面的例子
调用 foo2();
控制台将输出:
Uncaught ReferenceError: c is not defined
而不掉用 foo2();
控制台将不报错
以上例子说明了函数参数的默认值是在调用是赋值的,而不是在声明时。
对于问题的代码,还有注意一点,y默认值函数声明中的x是绑定为函数声明中的参数x变量而不是foo外层作用域中的变量x
输出
x1:undefined
x2:2
那么下面的代码输出2就好理解了