Javascript d3源代码中闭包中带偏执的赋值

Javascript d3源代码中闭包中带偏执的赋值,javascript,d3.js,Javascript,D3.js,在浏览d3源代码时,我: scale.unknown=函数{ return arguments.length?(未知=551;,比例):未知; }; 这将在此处实现模式:。下面是一个简单的示例,上面的代码经过了修改: 函数闭包(){ 让骡子 功能my(t){ 返回t*mult } my.mult=函数{ return arguments.length?(mult=\我的):mult } 归还我的 } 之后,您可以这样使用它: fn=closure() fn.mult(2) console.l

在浏览d3源代码时,我:

scale.unknown=函数{
return arguments.length?(未知=551;,比例):未知;
};
这将在此处实现模式:。下面是一个简单的示例,上面的代码经过了修改:

函数闭包(){
让骡子
功能my(t){
返回t*mult
}
my.mult=函数{
return arguments.length?(mult=\我的):mult
}
归还我的
}
之后,您可以这样使用它:

fn=closure()
fn.mult(2)
console.log(fn(3))//6
fn.mult(4)
console.log(fn(3))//12
在上面的例子中,我不明白的是这一行:

returnarguments.length?(mult=uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
这将检查是否有参数,如果有,则将参数分配给mult,如果没有,则返回mult


但是括号在
(mult=uuu,my)
中是什么意思呢?将返回的函数放在最后做什么?

我相信这里实际上有两个不同的问题

第一个是关于括号的:Bostock(D3创建者)这样做是为了利用括号,这是他在代码中常用的。总之,这

return arguments.length ? (mult = _, my) : mult
转换为:函数是否有任何传递的参数?如果no,则返回
mult
的值;如果yes,则返回
my
函数并将传递的参数分配给
mult

然后你有第二个问题:

将返回的函数放在最后做什么

不多,因为那不是必要的。
argument.length的测试只是使用一个getter,也就是说,如果没有传递任何参数,则返回存储的值。可能只是:

return arguments.length ? mult = _ : mult;
您可以在此处查看:

函数闭包(){
让骡子
功能my(t){
返回t*mult
}
my.mult=函数{
return arguments.length?mult=\uUt:mult;
}
归还我的
}
fn=闭包()
fn.mult(2)
控制台日志(fn(3))
fn.mult(4)
控制台日志(fn(3))
console.log(“存储值:+fn.mult())