Какова цель самостоятельного выполнения функции в JavaScript? - PullRequest
390 голосов
/ 26 февраля 2009

В javascript, когда вы хотите использовать это:

(function(){
    //Bunch of code...
})();

за это:

//Bunch of code...

Ответы [ 16 ]

2 голосов
/ 20 октября 2015

Самостоятельно вызванная функция в javascript:

Вызывающее само выражение вызывается (запускается) автоматически, без вызова. Вызывающее себя выражение вызывается сразу после его создания. Это в основном используется для избежания конфликта имен, а также для достижения инкапсуляции. Переменные или объявленные объекты не доступны вне этой функции. Во избежание проблем минимизации (filename.min) всегда используйте самореализуемую функцию.

1 голос
/ 24 апреля 2018

Самоисполняющаяся функция используется для управления областью действия переменной.

Область действия переменной - это область вашей программы, в которой она определена.

Глобальная переменная имеет глобальную область видимости; он определяется везде в вашем коде JavaScript и может быть доступен из любого места скрипта, даже в ваших функциях. С другой стороны, переменные, объявленные внутри функции, определяются только в теле функции. Они являются локальными переменными, имеют локальную область видимости и доступны только внутри этой функции. Параметры функции также считаются локальными переменными и определяются только в теле функции.

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

var globalvar = "globalvar"; // this var can be accessed anywhere within the script

function scope() {
    alert(globalvar);
    localvar = "localvar" //can only be accessed within the function scope
}

scope(); 

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

1 голос
/ 26 февраля 2009

Поскольку функции в Javascript являются объектами первого класса, определяя его таким образом, он эффективно определяет «класс», очень похожий на C ++ или C #.

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

0 голосов
/ 31 марта 2017
(function(){
    var foo = {
        name: 'bob'
    };
    console.log(foo.name); // bob
})();
console.log(foo.name); // Reference error

На самом деле вышеуказанная функция будет обрабатываться как выражение функции без имени.

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

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

0 голосов
/ 18 декабря 2016

Похоже, что на этот вопрос уже все готово, но я все равно выложу свои комментарии.

Я знаю, когда мне нравится использовать самовыполняющиеся функции.

var myObject = {
    childObject: new function(){
        // bunch of code
    },
    objVar1: <value>,
    objVar2: <value>
}

Функция позволяет мне использовать дополнительный код для определения атрибутов и свойств childObjects для более чистого кода, таких как установка часто используемых переменных или выполнение математических уравнений; Ой! или проверка ошибок. в отличие от того, чтобы быть ограниченным синтаксисом создания вложенных объектов ...

object: {
    childObject: {
        childObject: {<value>, <value>, <value>}
    }, 
    objVar1: <value>,
    objVar2: <value>
}

Кодирование в целом имеет много неясных способов делать много одинаковых вещей, заставляя задуматься: «Зачем беспокоиться?» Но появляются новые ситуации, когда вы больше не можете полагаться только на основные / основные принципы.

0 голосов
/ 26 февраля 2009

IIRC позволяет создавать частные свойства и методы.

...