В чем разница между глобальным объявлением функции и использованием window.myfunc = myfunc - PullRequest
1 голос
/ 11 марта 2010

В чем разница между следующими 2 примерами кода:

(function(){
    var myFunc = (function(){
        //do something
    })();
    window.myFunc = myFunc;
})();

и

var myFunc = (function(){
    //do something
})();

Ответы [ 2 ]

3 голосов
/ 11 марта 2010

Эти два способа действительно похожи, но есть небольшая разница в том, как создается глобальная переменная myFunc.

Вторым способом, используя оператор var, создаст переменную myFunc как неотъемлемое свойство глобального объекта, оператор var явно устанавливает внутренний атрибут {DontDelete}, например,

var myFunc = (function(){
    //do something
})();

delete window.myFunc; // false

Пока можно удалить первый:

(function(){
    var myFunc = (function(){
        //do something
    })();
    window.myFunc = myFunc;
})();

//...
delete window.myFunc; // true

Если вы попробуете описанное выше в Firebug, оба могут быть удалены, потому что Firebug использует оценку кода (eval) в консоли.

Вы можете проверить приведенный выше пример здесь .

Рекомендуемая статья:

0 голосов
/ 11 марта 2010

Семантически ничего. Однако в первом примере вы можете иметь «частные» функции, которые могут сделать ваш код более читабельным.

Возьмите этот пример:

(function(){
    var helperFunc = function()
    {
        //do something else
    }
    var myFunc = function(){
        //do something
        helperFunc();
    }
    window.myFunc = myFunc;
})();

Более чистый код в руках хорошего разработчика

...