我在任何函数之外的.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 ...
})();
这样做有什么好处?什么是这些类型的函数?
答案 0 :(得分:2)
它们被称为立即执行的函数(IEF)。你会经常听到它们被称为自动执行功能,但这有点用词不当;他们不是自我执行,而是由你执行,但是立即执行。
好处是保护全球范围免受污染。例如,这可以防止库和插件之间的冲突,并且对于严格模式这样的事情也很有用,其中一部分原理是所有东西都包含在某种闭包中。
我不会有很多IEF;考虑为整个脚本设一个。或者,您可以使用对象模式之类的东西来实现全局闭包。