为什么此生成器返回PI而不是0?

时间:2019-01-07 00:20:17

标签: javascript node.js generator

generator.prototype.__proto__.math,函数的参数设置e = 0。但是,在调用gen.math(1)时,e的值似乎设置为1而不是0。初始的e = 0gen.math(1)覆盖还是还有其他东西? ?

function * generator() {
  yield 1;
}

generator.prototype.__proto__.math = function(e = 0) {
  return e * Math.PI;
}

generator.prototype.__proto__; 

const gen = generator();
gen.math(1); // 3.141592653589793

2 个答案:

答案 0 :(得分:1)

我认为这种行为与生成器完全无关。您的代码本质上等同于

const math = function(e = 0) {
  return e * Math.PI;
};

math(1);

您为e = 0使用的语法是Default parameters的语法。它不会覆盖提供的参数。如果没有提供参数,它所做的只是提供值。所以你可以做

math()

并获得0

如果您想忽略参数值,可以在我们的函数体中轻松实现。如果情况比较复杂,则可能需要使用bind来设置参数值。

答案 1 :(得分:1)

首先要回答您的问题,function(e = 0)定义了一个默认参数为e = 0的函数。这意味着如果未提供e,它将默认为0的值。例如,当您仅致电math()时。

您正在呼叫math(1),这将传递e的值-因此默认设置将不适用。 e将只是传递的值,即1

我还想提醒您修改__proto__-您设置的行:

generator.prototype.__proto__.math = function(e = 0);

实际上是在所有math的{​​{1}}上定义prototype。我想,您可能不打算发生这种情况。

有关更多信息,请参见__proto__的文档,请注意顶部的所有红色大框。 :)