全局范围内的JavaScript语句

时间:2014-03-21 10:33:10

标签: javascript jquery facebook-javascript-sdk

我在任何函数之外的.js文件中编写了一个if语句,这意味着它在全局范围内,对吧?

以下是代码段: -

if ((window != window.parent) && (document.referrer.indexOf("facebook") != -1)) {
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '...',
            status     : true,
            xfbml      : true
        });
    };

    (function(d, s, id){
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/all.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
}

以下列方式编写此语句是否更好: -

(function() {
    if ...
})(); 

这样做有什么好处?什么是这些类型的函数?

1 个答案:

答案 0 :(得分:2)

它们被称为立即执行的函数(IEF)。你会经常听到它们被称为自动执行功能,但这有点用词不当;他们不是自我执行,而是由你执行,但是立即执行。

好处是保护全球范围免受污染。例如,这可以防止库和插件之间的冲突,并且对于严格模式这样的事情也很有用,其中一部分原理是所有东西都包含在某种闭包中。

我不会有很多IEF;考虑为整个脚本设一个。或者,您可以使用对象模式之类的东西来实现全局闭包。