摘自书中:“默认值是按需计算的,仅在实际需要时才计算:
const log = console.log.bind(console);
function g(x=log('x'), y=log('y')) {return 'DONE'}
为什么当我给这个函数一个实际参数时,它返回 y,当两个参数时,它只返回“DONE”,但如果我不给它任何行为。它会产生 x、y 和 return 语句的参数?
>> g(0)
y
"DONE"
>> g()
x
y
'DONE'
>> g(1)
y
'DONE'
g(1, 2)
'DONE'
最佳答案
这个函数声明说:
function g(x=log('x'), y=log('y')) {return 'DONE'}
如果没有传入x
,则计算log(x)
,它只是console.log(x)
(这会导致“x”写入控制台)
;如果在计算log(y)
中没有传递y
。
如果您传入x
或y
,则无需计算值,因此log(x)
(或y)未计算,您不会得到控制台日志。如果您不传入值,则会调用 log()
将值写入控制台。无论您传入什么,函数的返回值都是DONE
。
这是一个非常人为的示例,但看起来重点是要证明,如果您传入一个值,则永远不会评估 equals 的右侧。
关于javascript - 请帮我删除 Exploring ES6 中的这个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694648/