2016-06-09 3 views
1

У меня есть следующий код, который не запускается (я пытаюсь иметь 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(); 
}()); 
+0

Объявление функций требует имен, выражения функций - нет. '(...)' заставляет функцию оцениваться как выражение функции. –

+0

вы можете использовать 'void'. –

+0

@ NinaScholz - вы можете что угодно, что означает, что ключевое слово * function * не находится в начале инструкции, '!' Также используется, но '()' обычно является предпочтительным. – RobG

ответ

1

Обертывания его в круглых скобках, как вы сделаете это выражение. Результатом выражения является последний аргумент, и поскольку в нем есть только один аргумент (функция), который является значением выражения.

После оценки значение выражения (функции) затем вызывается с использованием следующего набора скобок.

Именно поэтому оно завернуто в круглые скобки, чтобы создать фактическое выражение.

+0

Это не имеет никакого отношения к обертке в скобках. –

Смежные вопросы