2011-05-27 57 views
2

我正在玩弄函数表达式,并试图让我的脑袋围绕一些东西。这是我写的代码。带参数的函数表达式

这工作

var sum=function(arg1,arg2){ 
    return(function(){alert(arg1*arg2)}) 
} 

document.getElementById('button_1').onclick=sum(3,2); 

这并不,我知道它并不甚至看right.But我只是想了解当时正在显示here.It错误背后的原因,首先与6所显示的警告框,然后错误消息“未实现”,这是在IE6中。

var sum=function(arg1,arg2){ 
    alert(arg1*arg2); 
} 

document.getElementById('button_1').onclick=sum(3,2); 

如果你们认为这个问题不需要回答,请让我知道,我会删除它。

感谢

回答

1

在第二个例子你的总和变量不返回一个函数指针。必须将onclick事件分配给函数指针。因此,在第二个示例中,您直接通过传递两个参数来调用sum函数,并且因为此函数不返回任何内容(它只是提醒)它不起作用。为了让你需要的第二个例子的工作:

document.getElementById('button_1').onclick = sum; 

但是一旦按钮被点击它会传递一个参数,其表示事件这笔功能。

在第一个示例中,您通过传递两个参数来调用sum函数,但此调用仅返回另一个函数,然后将其分配给onclick事件。

我想你想这虽然:

document.getElementById('button_1').onclick = function() { sum(3,2); }; 
+0

@Darin如果是做这样做,的document.getElementById( 'button_1')的onclick =总和,则它用NaN提醒我。所以当我必须传递函数表达式的参数给onclick事件时,我必须返回一个函数吗? – manraj82 2011-05-27 11:14:30

+0

@ manraj82,如果您使用onclick处理程序,则将传递的唯一参数将是事件。所以如果你想给onclick事件分配一些函数,这个函数只能接受一个参数,即事件。当按钮被点击时,你不能分配带多个参数的函数。javascript不知道传递给这个函数的值是什么。 – 2011-05-27 11:15:38

+0

@Darin所以这是否意味着我更好地做这样的事情然后 manraj82 2011-05-27 11:19:09

0

使用局部变量是因为我有更多的控制的优选方式有关一个函数被调用。将参数传递给函数表达式并不自然,因为它需要一些奇怪的语法。这里是我通常在Javascript中使用函数的方式。

声明一个本地范围的函数:
var enableStopBtn = function('videoBtnId') { // do something }

调用变量: enableStopBtn('myVideob');