我正在使用一个使用 jsonP 共享跨域信息的脚本。它运作良好,但我需要把它放在 IIFE 中。
var domain = "http://example.com/";
var myObj = {
recupData : function(data){
if (data.id) {
console.log(data.id);
}
},
scriptTag : function() {
var siteOrigin = domain+"check?q=myObj.recupData",
script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.src = siteOrigin;
document.getElementsByTagName('HEAD')[0].appendChild(script);
}
}
myObj.scriptTag();
这样可行!(我只使用了我的全局脚本的一小部分,只是为了向您展示结构,所以如果那里有任何语法错误,那不是重点)。
但是当我把这段代码放在一个 IIFE(一个自调用函数)中时,我遇到了一些麻烦。
(function(){
var domain = "http://example.com/";
var myObj = {
recupData : function(data){
if (data.id) {
console.log(data.id);
}
},
scriptTag : function() {
var siteOrigin = domain+"check?q=myObj.recupData",
script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.src = siteOrigin;
document.getElementsByTagName('HEAD')[0].appendChild(script);
}
}
myObj.scriptTag();
})();
我收到错误 myObj 未定义,错误来自 scriptTag 方法,我真的不明白为什么在添加 IIFE 之前我无法访问此方法,它不应该改变任何东西,它只是避免污染全局命名空间。我认为这只是一个上下文问题,但我需要一个解释。