У меня есть следующий код, который не запускается (я пытаюсь иметь 0 глобальных переменных).Зачем нужно обертывать выражение с мгновенным вызовом функции IIFE в скобках Javascript
function() {
var createworker = function() {
//private implemenation
var count = 0;
var task1 = function() {
count += 1;
console.log("task1 " + count);
};
var task2 = function() {
count += 1;
console.log("task2 " + count);
};
return {
// these are the aliases or the public api
// revealing module pattern mode
job1: task1,
job2: task2
};
};
var result = 2 + 2;
var worker = createworker();
worker.job1();
worker.job2();
worker.job2();
worker.job2();
worker.job2();
}();
Javascript не любит, что по какой-то причине. Но следующий пример или просто перенос анонимной функции в() позволяет ее вызвать. Что здесь происходит и почему это так?
(function() {
var createworker = function() {
//private implemenation
var count = 0;
var task1 = function() {
count += 1;
console.log("task1 " + count);
};
var task2 = function() {
count += 1;
console.log("task2 " + count);
};
return {
// these are the aliases or the public api
// revealing module pattern mode
job1: task1,
job2: task2
};
};
var result = 2 + 2;
var worker = createworker();
worker.job1();
worker.job2();
worker.job2();
worker.job2();
worker.job2();
}());
Объявление функций требует имен, выражения функций - нет. '(...)' заставляет функцию оцениваться как выражение функции. –
вы можете использовать 'void'. –
@ NinaScholz - вы можете что угодно, что означает, что ключевое слово * function * не находится в начале инструкции, '!' Также используется, но '()' обычно является предпочтительным. – RobG