如果我們有一個功能:默認參數拋出錯誤
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:第二個未定義 –