调用时javascript是否不检查函数参数。
此功能"测试"即使没有参数调用,它也会触发。
<input type="button" value="test" onclick="test()">
test = function(param){
alert("test");
}
小提琴:
http://jsfiddle.net/Yazpj/1912/
如果没有抛出错误,或者javascript引擎/解析器在查找要调用的内容时甚至不检查函数参数。这对覆盖函数有什么影响吗?
答案 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]