该书摘录:“仅在实际需要时才根据需要计算默认值:
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'
答案 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)
您在函数中设置为x
和y
的值为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'))
相同,因此x
和y
都被注销。
g(1)
与第一个示例相同:g(x = 1, y = log('y'))
,因此只有y
被注销。您对函数内的1
不执行任何操作,因此仅返回DONE
。
g(1, 2)
与g(x = 1, y = 2)
相同,因此不会注销任何内容,因为您对函数内部的1 and 2
不执行任何操作。仅返回DONE
。