具有相同参数的 Javascript 函数声明
Javascript function declaration with same arguments
我自己也在学习JavaScript。我发现如果我声明一个具有相同参数的函数,它就可以正常工作:
function func(a, b, a){
return b;
}
alert(func(1,2,3));
但是如果我这样做:
function func(a, b, a = 5){
return b;
}
alert(func(1,2,3));
//Firebug error - SyntaxError: duplicate argument names not allowed in this context
然后它不再工作了。它适用于第一个方程但不适用于第二个方程背后的逻辑是什么?
ES2015(该语言的最新稳定规范)允许使用默认值声明参数。执行此操作时,该语言将不允许您重复使用参数名称。
当您不执行任何参数默认值时,该语言允许旧的"草率"重用参数名称。如果启用"严格"模式解释,则第一个示例也会出错。
根据规范
- 如果 parameterNames 有任何重复的条目,则让 hasDuplicates 为 true。否则,让 hasDuplicates 为假。
21.b
注意 早期错误确保只能出现重复的参数名称在没有参数默认值的非严格函数中或其余参数。
因此,您的 JS 引擎确保如果其中一个参数具有默认值并且hasDuplicates
为 true,则它会引发错误。
根据MDN的说法,这种检查是由JS在内部完成的,以防出现默认值。
function go() {
return ":P"
}
function withDefaults(a, b = 5, c = b, d = go(), e = this,
f = arguments, g = this.value) {
return [a,b,c,d,e,f,g];
}
function withoutDefaults(a, b, c, d, e, f, g){
switch(arguments.length){
case 0:
a
case 1:
b = 5
case 2:
c = b
case 3:
d = go();
case 4:
e = this
case 5:
f = arguments
case 6:
g = this.value;
default:
}
return [a,b,c,d,e,f,g];
}
withDefaults.call({value:"=^_^="});
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
withoutDefaults.call({value:"=^_^="});
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
现在在你的例子中,这是这样的——
case 0:
a
case 1:
b
case 2:
a = a
但是在执行案例 2 时,仍未定义a
,因此它在错误场景中通过。
在此处查看详细信息 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/default_parameters
参数名称必须是唯一的; 如果你对两个参数使用相同的名称,然后解释器会混淆你想访问哪一个;
与您在代码中添加的注释相同
//Firebug error - SyntaxError: duplicate argument names not allowed in this context
"默认函数参数允许在没有传递值或未定义值的情况下使用默认值初始化形式参数。"ES2015 中的默认参数
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别