SyntaxError: duplicate formal argument x
當一個函式建立兩個或更多同名引數繫結,並且該函式不是一個僅包含簡單引數的非嚴格函式時,JavaScript 會丟擲異常“duplicate formal argument x”(重複的形式引數 x)或“duplicate argument names not allowed in this context”(在此上下文中不允許重複引數名)。
訊息
SyntaxError: Duplicate parameter name not allowed in this context (V8-based) SyntaxError: duplicate formal argument x (Firefox) SyntaxError: duplicate argument names not allowed in this context (Firefox) SyntaxError: Cannot declare a parameter named 'x' in strict mode as it has already been declared. (Safari) SyntaxError: Duplicate parameter 'x' not allowed in function with default parameter values. (Safari) SyntaxError: Duplicate parameter 'x' not allowed in function with a rest parameter. (Safari) SyntaxError: Duplicate parameter 'x' not allowed in function with destructuring parameters. (Safari)
錯誤型別
SyntaxError
哪裡出錯了?
擁有兩個同名形式引數很可能是一個錯誤——第二次出現將導致無法透過引數名訪問第一次出現。在舊版 JavaScript 中,這是允許的。因此,為了不破壞現有程式碼,僅當代碼保證不是舊版程式碼時(因為它處於嚴格模式下或使用了現代引數語法(剩餘引數、預設引數或解構引數))才會丟擲此錯誤。
示例
無效案例
js
"use strict";
function add(x, x) {
// How can you access both "x" parameters?
// SyntaxError: duplicate formal argument x
}
js
function doSomething(name, { name }) {
// How can you access both "name" parameters?
// SyntaxError: duplicate argument names not allowed in this context
}
有效情況
js
function doSomething(operationName, { name: userName }) {
// You can access both "operationName" and "userName" parameters.
}
function doSomething(name, user) {
// You can access both "name" and "user.name" parameters.
}