2011-05-27 121 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');