我正在玩函数表达式并尝试解决一些问题。这是我写的代码。
这有效
var sum=function(arg1,arg2){
return(function(){alert(arg1*arg2)})
}
document.getElementById('button_1').onclick=sum(3,2);
这没有,我知道它甚至看起来都不对。但我只是想了解这里显示的错误背后的原因。它首先显示警报框6然后错误消息“未实现”,这是在IE6中。
var sum=function(arg1,arg2){
alert(arg1*arg2);
}
document.getElementById('button_1').onclick=sum(3,2);
如果你们认为这个问题不需要答案请告诉我,我会将其删除。
由于
答案 0 :(得分:2)
在第二个示例中,sum变量不返回函数指针。必须将onclick
事件分配给函数指针。所以在第二个例子中,你通过传递两个参数来直接调用sum函数,因为这个函数不返回任何东西(它只是警告)它不起作用。要使它适用于您需要的第二个示例:
document.getElementById('button_1').onclick = sum;
但是一旦单击该按钮,它将向该sum函数传递一个参数,该函数表示该事件。
在第一个例子中,你通过传递两个参数来调用sum函数,但是这个调用只返回另一个函数,然后将其赋值给onclick事件。
我想你想要这个:
document.getElementById('button_1').onclick = function() { sum(3,2); };
答案 1 :(得分:0)
使用局部变量是一种首选方法,因为当调用函数时,我可以更好地控制。将参数传递给函数表达式并不自然,因为它需要一些奇怪的语法。以下是我通常在Javascript中使用函数的方法。
声明一个本地范围的函数:
var enableStopBtn = function('videoBtnId') {
// do something
}
调用变量:
enableStopBtn('myVideob');