2016-09-27 63 views
1

如果我们有一个功能:默认参数抛出错误

function add(first = second, second) { return first + second; } 

调用它为:

add(1,2); // returns 3 

上面的代码工作正常,但如果我们把它作为:

add(undefined, 2); //throws error 

我不确定在ES6中如何解析内部参数,导致最后一个错误。

+1

哪些错误做它扔?请发布错误消息。 – Bergi

+0

错误:未捕获ReferenceError:第二个未定义 –

回答

3

secondfirst默认初始化器被评估尚未初始化,它仍然在那里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); } 
+0

我没有因为这个错误而卡住,我只想知道行为。如果你说秒还没有初始化,那么为什么在第一种情况下它不会引发错误!添加(1,2)很棒!出于这个原因,只有我推出了工作而非工作的例子 –

+1

如果你传递了除undefined之外的任何东西(或者什么也没有),那么默认的intialiser根本就不被评估,所以在那里没有对“second”的访问并没有抛出。 – Bergi