我理解一个功能,以及它是如何工作的。但是,我不确定以下内容:
function(msg) { alert(msg); }
如果没有分配给任何东西,它是如何调用的?
我对此更熟悉:
function alert(msg) { // set it
alert(msg);
}
alert('hello!'); //call it
答案 0 :(得分:2)
您可以将使用此语法定义的函数分配给变量,就像其他对象一样:
var myAlert = function(msg) { alert(msg); };
myAlert("hello!");
匿名函数的最常见用例是作为高阶函数 - 当您将函数作为另一个函数的参数提供时。一个常见的例子是AJAX请求 - 您提供了一个在请求完成时执行的回调函数。使用jQuery,你可以写:
$.get('/someurl', myAlert);
当myAlert
处的资源响应时,jQuery将执行/someurl
。
答案 1 :(得分:1)
调用匿名函数有四种常用方法:
将其保存为如此变量:
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 );
});
答案 2 :(得分:0)
除了将其分配给变量之外,joews指出,您可以像这样立即调用它:
(function(msg) { alert(msg); })('hello!');
或者您可能希望将其作为参数传递给另一个函数,如下所示:
['hello!'].forEach(function(msg) { alert(msg); });
答案 3 :(得分:0)
本身并非如此。你需要对它有一些参考。
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的使用可能不准确。我很快就这样说明了这一点。
当你将内联函数传递给某个东西或将它分配给变量时,这种模式被称为函数表达式。
答案 4 :(得分:0)
必须分配给var
例如
var f = function () {};
或分配给功能的Fun(arg1, function (){});