我使用checkForm函數來驗證一個簡單的表單。當用戶按提交時,運行checkForm。第一個和第二個例子有什麼區別?調用函數和返回函數有什麼區別?
例1
$('form').submit(function(){
checkForm();
});
例2
$('form').submit(function(){
return checkForm();
});
我使用checkForm函數來驗證一個簡單的表單。當用戶按提交時,運行checkForm。第一個和第二個例子有什麼區別?調用函數和返回函數有什麼區別?
例1
$('form').submit(function(){
checkForm();
});
例2
$('form').submit(function(){
return checkForm();
});
在第二個例子中,你實際上並不返回功能而是已執行該功能的結果。 (考慮到代碼從右到左在這種情況下執行)
爲了說明這一點,稍微改變你的第一個例子:
$('form').submit(function(){
var result = checkForm();
});
正如你所看到的,執行功能和結果從函數返回。這只是沒有結果。隨着匿名功能的完成,它立即超出範圍,逐漸淡入古代。
稍微修改第二個例子來進一步說明:
$('form').submit(function(){
var result = checkForm();
return result;
});
正如第一實施例,checkForm
被執行,且其結果存儲在變量中。然後,該值從匿名函數返回。當然,這個過程可以在襯裏,使得不需要臨時變量:
$('form').submit(function(){
return checkForm();
});
操作的順序不改變,checkForm
被執行,返回一個結果,並且該結果是從返回匿名功能。
您可以返回函數本身,具有不實際執行它:
$('form').submit(function(){
return checkForm;
});
由於函數是「一等公民」在JavaScript中,可以像任何其他變量那樣來傳遞,這將返回一個實際的功能,而不是功能的結果。假定調用代碼可能最終會執行該函數。然而,在這種情況下(一個submit
處理程序),這當然是沒有意義的,因爲它期望一個布爾值而不是函數。
感謝您的詳細解答,它真正澄清了區別。 – Operator
在你的代碼的主要區別是,在第一種情況下,你只要運行驗證,並在第二種情況下,如果您的驗證將返回布爾值將阻止表單提交。
因此,在第一種情況下,您的表單將每次提交,即使checkForm()
將返回false
。在第二種情況下,如果checkForm()
將返回true
您的表單將被提交,如果它將返回false
它將阻止表單提交。
所以基本上承擔checkForm()
返回false
,你的函數將在第一個例子是:
$('form').submit(function(){
false;
});
並在第二個例子:
$('form').submit(function(){
return false;
});
'checkForm()'返回什麼? – Satpal
在事件處理函數中,你可以返回'true'或'false',後者在jQuery中結合'preventDefault'和'stopPropagation',停止表單提交,所以如果checkForm()函數返回false,沒有被提交,如果它返回'true'表單被提交等。 – adeneo
在例2中,你沒有返回一個函數,而是返回執行該函數的結果。返回一個函數看起來像這樣:'return checkForm;'。當然,在這種情況下這沒有意義,但我認爲這種區別很重要。 –