如果我们有一个功能:默认参数抛出错误
function add(first = second, second) { return first + second; }
调用它为:
add(1,2); // returns 3
上面的代码工作正常,但如果我们把它作为:
add(undefined, 2); //throws error
我不确定在ES6中如何解析内部参数,导致最后一个错误。
如果我们有一个功能:默认参数抛出错误
function add(first = second, second) { return first + second; }
调用它为:
add(1,2); // returns 3
上面的代码工作正常,但如果我们把它作为:
add(undefined, 2); //throws error
我不确定在ES6中如何解析内部参数,导致最后一个错误。
second
时first
默认初始化器被评估尚未初始化,它仍然在那里temporal dead zone访问它会抛出尽管being in scope。
你应该把可选的第二个参数:
function add(first, second = first) { return first + second; }
// and call it as
add(2);
add(2, undefined);
如果你真的想第一个可选的,你必须这样做,在函数体:
function add(first, second) { return first + (second === undefined ? first : second); }
我没有因为这个错误而卡住,我只想知道行为。如果你说秒还没有初始化,那么为什么在第一种情况下它不会引发错误!添加(1,2)很棒!出于这个原因,只有我推出了工作而非工作的例子 –
如果你传递了除undefined之外的任何东西(或者什么也没有),那么默认的intialiser根本就不被评估,所以在那里没有对“second”的访问并没有抛出。 – Bergi
哪些错误做它扔?请发布错误消息。 – Bergi
错误:未捕获ReferenceError:第二个未定义 –