【发布时间】:2018-02-27 22:27:22
【问题描述】:
ES6 引入了default parameters。我试图了解内联函数默认参数如何与此新功能一起使用。具体来说它的范围是如何工作的。
以下面两个函数为例:
function one(x, f = function (){return x})
{
var x = 5;
console.log([x,f()]);
}
function two(x, f = function (){return x})
{
x = 5;
console.log([x,f()]);
}
one(1);//[5,1]
two(1);//[5,5]
这样说是否正确,在函数一中,f 在参数列表中为x 保留了自己的闭包范围,因此当函数将 x 重新定义为新的 var:var x = 5; 时,引用f有,是不是和函数里面的那个一样?
如果是这样,功能一是否等于以下功能三:
function three(x,f)
{
var x2 = x;
f = f !== undefined ? f : () => x2;
var x = 5;
console.log([x,f()]); //[5,1]
}
如果有人能指出文档的正确部分,我也尝试找到如何记录这种行为,但没有运气。
【问题讨论】:
-
是的,您的描述是正确的。我认为散文中没有真正记录它,因为这个用例非常奇特。