2013-11-26 3 views
0

Я понимаю функцию и как она работает. Однако я не уверен в следующем:Понимание анонимных функций с помощью JavaScript

function(msg) { alert(msg); } 

Если это не присвоено никому, как это называется?

Я больше знаком с этим:

function alert(msg) { // set it 
    alert(msg); 
} 

alert('hello!'); //call it 
+0

этот первый фрагмент, как есть, вызывает синтаксическую ошибку. Я думаю, вы оставили что-то важное. –

+0

А, я просто скопировал его из учебника. –

ответ

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); 
}); 
+0

Как работает обратный вызов, вы задали 3 параметра? 'someFn (x, y, z)'? –

+2

Существует более 4 способов вызова анонимной функции, например: '(function (msg) {console.log (msg)}). Call (null, 'Hello World');' –

+0

hey @tmyie это может быть немного выходит за рамки вопроса, но по существу функция будет использовать первые два параметра для чего-то и вызвать обратный вызов, когда захочет. Это может быть 1 парам или двадцать, это действительно не имеет значения, просто нужно показать, что другие анонимные функции могут быть использованы, дайте мне второй, и я настрою jsfiddle для вас – kkemple

2

Вы можете назначить функции, определенные с этим синтаксисом к переменным, так же как и другие объекты:

var myAlert = function(msg) { alert(msg); }; 
myAlert("hello!"); 

Наиболее распространенный способ использования анонимных функций как функция более высокого порядка - когда вы предоставляете функцию в качестве аргумента другой функции. Общим примером является запрос AJAX - вы предоставляете функцию обратного вызова, которая должна выполняться по завершении запроса. С помощью JQuery, вы могли бы написать:

$.get('/someurl', myAlert); 

JQuery будет выполнять myAlert, когда ресурс на /someurl откликается.

0

В дополнение к присваиваем его переменной, как joews указывает, вы можете назвать это сразу же, как это:

(function(msg) { alert(msg); })('hello!'); 

Или вы можете передать его в качестве параметра другой функции, например:

['hello!'].forEach(function(msg) { alert(msg); }); 
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 не может быть точным. Я сделал это быстро, чтобы проиллюстрировать это.

Этот шаблон называется выражением функции, кстати, когда вы передаете встроенную функцию или присваиваете ее переменной.

0

должен быть назначен вар

Например

var f = function() {}; 

Или назначен арг функции

Fun(arg1, function(){}); 
Смежные вопросы