2016-09-27 94 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