Что означает вызов: foo (function (params) {...}); - PullRequest
0 голосов
/ 19 июля 2011

Я знаю о функциях, которые были объявлены и немедленно вызваны, например,

(function(arg) {...}(value))();

, но что это значит:

functionName(function(params){...});

Это в (первой строке кода) файл demo / demo.js Ace editor , и это худший код javascript, с которым я когда-либо сталкивался.Я хочу знать, действительно ли оно написано плохо или я слишком новичок, чтобы расшифровать его.

Ответы [ 4 ]

2 голосов
/ 19 июля 2011

Анонимная функция передается функции functionName().

Если он плохо написан, или вы слишком новичок, это зависит, потому что это может быть только законное использование этого стиля.

2 голосов
/ 19 июля 2011

В этом случае

outerFunc(function(params) { ... })

содержит определение их модуля в анонимной функции, которую outerFunc использует для управления его определением.В коде, который вы ссылаетесь на , они используют функцию define из RequireJS для выполнения нескольких задач, включая указание зависимостей и выполнение контекста.является частью спецификации модулей CommonJS и должна быть реализована по-разному на разных платформах JavaScript, которые вы используете.Этот дизайн кода более чем разумный;он следует предложенным спецификациям, которые в будущем могут стать основной частью языка.

0 голосов
/ 19 июля 2011
(function(arg) {...}(value));

Это не вызов функции.Вы, вероятно, имели в виду (function(params) {...}(value))(someArgs);.

functionName(function(params){...});

Это вызов функции functionName, передающий эту анонимную функцию в качестве параметра.

Это (по существу) так же, как:

var f = function(params) { ... };
functionName(f);

или:

function f(params) { ... };
functionName(f);

Учтите:

function functionName(f) {
   f();
}

То, что ... теперь вызывается.

0 голосов
/ 19 июля 2011

Не плохо закодировано.Это анонимная функция, передаваемая функции functionName.Эта функция будет иметь локальное имя для functionName и может вызываться внутри нее.Это может быть чрезвычайно полезно во многих случаях.

sort(my_arr, function(obj1, obj2){ 
        return obj1.age*obj1.color - obj2.age*obj2.color; 
    }
);

function sort(arr, compare){
     // Sorts arr of objects using compare(arr[i], arr[j]);
}

Это позволит вам реализовать единую функцию сортировки sort, которая работает для всех возможных объектов, если вызывающая сторона предоставляет для этого функцию сравнения.тип объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...