了解JavaScript

010*_*xel 3 javascript function

我试图搜索这个JavaScript函数的解释.我想了解这个函数是如何获得价值的?有人可以建议一个我可以通过这种方式阅读更多关于传递/使用价值的地方.

pie.value = function(_) {
    if (!arguments.length) return value;
    value = _;
    return pie;
};
Run Code Online (Sandbox Code Playgroud)

此代码来自D3 JS.

flo*_*bon 6

它是一个依赖于闭包的getter/setter.

var value = 5; // initial value

var getterSetter = function(newValue) {
  // value is closed from the outer scope
  if (!arguments.length) {
    // CASE A
    return value;
  }
  // // CASE B
  value = newValue;
  return getterSetter;
};

getterSetter()   // arguments.length is 0 (CASE A) so displays value (5)

getterSetter(10) // arguments.length is 1 (CASE B) so values is set to 10

getterSetter()   // now this displays 10 since value now is 10 (CASE A)

console.log(value); // Also displays 10, this is the same value variable
Run Code Online (Sandbox Code Playgroud)

现在在CASE B中,您可以看到getterSetter返回自身.这样它就变成了一种可链接的,这意味着你可以这样做:

getterSetter(1)(2)(3)(); // assign 1 then 2 then 3 and displays 3;
Run Code Online (Sandbox Code Playgroud)

你的情况有点不同,因为pie在CASE B中返回了对象,而不是函数pie.value,这意味着你可以这样做:

pie.value(1).value(2).value(3).value();
Run Code Online (Sandbox Code Playgroud)