[英]Understanding anonymous functions with JavaScript
我了解功能及其工作原理。 但是,我不確定以下幾點:
function(msg) { alert(msg); }
如果這沒有分配給任何東西,它怎么稱呼?
我對此更加熟悉:
function alert(msg) { // set it
alert(msg);
}
alert('hello!'); //call it
您可以將使用此語法定義的函數分配給變量,就像其他對象一樣:
var myAlert = function(msg) { alert(msg); };
myAlert("hello!");
匿名函數最常見的用例是作為高階函數 -當您提供一個函數作為另一個函數的參數時。 一個常見的示例是AJAX請求-您提供在請求完成時要執行的回調函數。 使用jQuery,您可以編寫:
$.get('/someurl', myAlert);
當/someurl
的資源響應時,jQuery將執行myAlert
。
調用匿名函數有四種常用方法:
將其保存到這樣的變量中:
var fn = function(msg) {
// do something
}
通過用括號括起來執行,如下所示:
(function(msg) {
console.log( msg ); // -> 'This is my message'
})('This is my message');
通過在前面加上“!”來執行
!function(msg) {
console.log( msg ); // -> 'This is my message'
}('This is my message');
通過將其作為回調傳遞
someFn( param1, param1, function( msg ) {
console.log( msg );
});
正如joews指出的,除了將其分配給變量外,您還可以像這樣立即調用它:
(function(msg) { alert(msg); })('hello!');
或者您可能希望將其作為參數傳遞給另一個函數,如下所示:
['hello!'].forEach(function(msg) { alert(msg); });
就其本身而言,不是。 您需要某種形式的引用。
function(msg) { alert(msg); }();
// alert will appear
var f = function(msg) { alert(msg); };
f();
// alert will appear
$.ajax({
url: '/some/ajax/url',
method:' get'
})
.done(function(msg) { alert(msg); });
// alert will appear displaying the response data.
done
函數的想法是接受一個參數,然后執行該參數,如下所示:
function done(callback) {
...
callback(responseData);
}
我對jquery ajax api的用法可能不准確。 我這樣做很快就說明了這一點。
順便說一句,當您將內聯函數傳遞給某些東西或將其分配給變量時,該模式稱為函數表達式。
必須分配給一個變量
例如
var f = function () {};
或分配給函數arg
Fun(arg1, function (){});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.