全局范围内的JavaScript语句
我在.js文件中写了一个if语句,在任何函数之外,这意味着它在全局范围内,对吗 以下是代码片段:-全局范围内的JavaScript语句,javascript,jquery,facebook-javascript-sdk,Javascript,Jquery,Facebook Javascript Sdk,我在.js文件中写了一个if语句,在任何函数之外,这意味着它在全局范围内,对吗 以下是代码片段:- if ((window != window.parent) && (document.referrer.indexOf("facebook") != -1)) { window.fbAsyncInit = function() { FB.init({ appId : '...', status
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 ...
})();
这样做的好处是什么?这些类型的函数被称为什么?它们被称为立即执行函数(IEF)。你经常会听到它们被称为自执行函数,但这有点用词不当;他们不是自己执行的,他们是由你执行的,而是立即执行的 这样做的好处是保护全球范围免受污染。比如说,这可以防止库和插件之间的冲突,对于严格模式(strict mode)也很有用,严格模式的一部分原理是所有内容都包含在某种类型的闭包中
我不会有很多IEF;考虑一个完整的脚本。或者,您可以通过使用类似于对象模式的东西来实现全局闭包。“类似于对象模式的东西”。您能解释一下吗?您的所有代码都位于作为对象静态方法的模块中。