javascript - 请帮我删除 Exploring ES6 中的这个例子

标签 javascript

摘自书中:“默认值是按需计算的,仅在实际需要时才计算:

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

如果您传入xy,则无需计算值,因此log(x)(或y)未计算,您不会得到控制台日志。如果您不传入值,则会调用 log() 将值写入控制台。无论您传入什么,函数的返回值都是DONE

这是一个非常人为的示例,但看起来重点是要证明,如果您传入一个值,则永远不会评估 equals 的右侧。

关于javascript - 请帮我删除 Exploring ES6 中的这个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694648/

相关文章:

javascript - 使用 Three.js (JSON) 导出器在 Three.js 中加载 Blender 动画

javascript - 如何在 <img src =""> 标签中使用 html 文件作为图像文件的源

javascript - 在使用 `Math.random()` 时,我是否应该考虑 2^62 中有 1 种可能性获得排除的上限?

javascript - CSS 拉伸(stretch)容器到最宽隐藏子元素的宽度

javascript - 如何在 Meteor 服务器上使用多个文件?

带有单个管道的 Javascript 条件语句 "|"

javascript - 如何将从 API 获取的数组分配给 Vue.js 中的 data 属性?

javascript - 如何进一步拆分 JavaScript 对象中的字符串?

javascript - 删除后重新添加 onblur 属性

javascript - 我想在 Node.js : But I have no clue? 上使用 Twit 回复 'target' 推文