关于ES6的default value问题

从阮老师那边过来的 => http://es6.ruanyifeng.com/#docs/function#函数参数的默认值
原代码

var x = 1;
function foo(x, y = function() { console.log('init ' + x); x = 2; }) {
  var x = 3;
  y();
  console.log(x);
}
foo() // 3

在第二行我添加了一句console.log(x); 然后就陷入迷茫了,运行结果如下:

init: undefined

3

并没有想象中把init + x的值输出两遍... 求解答...

阅读 3.1k
2 个回答
var x = 1;

var fun = function () {
    console.log('int ' + x);
    x = 2;
};

function foo (x, y = fun) {
    var x = 3;
    y();
    console.log(x);
}

foo();

这么写试试能看懂嘛,如果看不懂就补补基础,作用域相关的知识点。

y的默认值是一个函数,函数中的x根据作用域链最近的x,最近的x是它前面的参数x,前面的参数没有默认值,所以输出undefined

如果这样

var x = 1;
function foo(x = 1, y = function() { console.log('init ' + x); x = 2; }) {
  var x = 3;
  y();
  console.log(x);
}
foo()

给与y一起的参数x也给一个默认值的话,就会输出:

init: 1

3

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题