用param调用no param javascript函数

时间:2014-09-09 15:53:42

标签: javascript jquery

调用时javascript是否不检查函数参数。

此功能"测试"即使没有参数调用,它也会触发。

<input type="button" value="test" onclick="test()">

test = function(param){
 alert("test");   
}
小提琴:

http://jsfiddle.net/Yazpj/1912/

如果没有抛出错误,或者javascript引擎/解析器在查找要调用的内容时甚至不检查函数参数。这对覆盖函数有什么影响吗?

3 个答案:

答案 0 :(得分:4)

不,JavaScript不会检查参数。

将忽略额外参数。声明但未传递的参数的值为undefined。所有传递的参数(声明的或其他)将出现在arguments伪数组中。

对覆盖函数没有任何影响,因为JS不支持覆盖函数。

具有多个签名的方法的jQuery等库使用单个函数来计算传递参数的类型,然后执行所需的操作。

答案 1 :(得分:0)

你必须自己检查:

var test = function (param) {
    if (typeof param === 'undefined') {
        // do something...
    }
};

答案 2 :(得分:0)

Javascript是一种非常灵活的语言,这仅仅是一个例子。除非您没有访问param,否则不会出现任何错误,例如param.sender

至于你的覆盖问题,这是真的。每个Javascript函数都有一个arguments变量,它是传递参数的数组。如果你给name命名定义函数JS的参数,只需按顺序给你。

但是覆盖是另一个故事,通过检查arguments元素有时只是数组的长度(有时是单个项目的类型)来实现覆盖。

例如;当你调用$("#name").val()因为没有项目时它只返回值,如果参数有值,这次jQuery用户正确分配,例如element.value = arguments[0]