请把这个例子从Exploring ES6中删除

时间:2018-12-09 17:06:16

标签: 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'

2 个答案:

答案 0 :(得分:1)

此函数声明如下:

function g(x=log('x'), y=log('y')) {return 'DONE'}

如果没有传入x,则计算log(x),它只是console.log(x)(这导致"x" to be written to the console);如果没有y传入计算{ {1}}。

如果传入log(y)x,则无需计算值,因此不会计算y(或y),也不会获得控制台日志。如果您不传递值,那么它将调用log(x)并将值写入控制台。不管您传入什么函数的返回值都是log()

这是一个非常人为的示例,但是似乎要说明的是,如果您传入一个值,则永远不会评估等号的右侧。

答案 1 :(得分:0)

您在函数中设置为xy的值为default值。这意味着,如果您不向函数g传递任何参数,它将使用您设置为默认x = log('x') and y = log('y')的值。

g(0)g(x = 0, y = log('y'))相同,因此只有y被注销。您对函数内的0不执行任何操作,因此仅返回DONE

g()g(x = log('x'), y = log('y'))相同,因此xy都被注销。

g(1)与第一个示例相同:g(x = 1, y = log('y')),因此只有y被注销。您对函数内的1不执行任何操作,因此仅返回DONE

g(1, 2)g(x = 1, y = 2)相同,因此不会注销任何内容,因为您对函数内部的1 and 2不执行任何操作。仅返回DONE