Javascript 确保回调函数中的全局变量可用性通过jQuery函数中的apply调用
简单示例: 插件代码Javascript 确保回调函数中的全局变量可用性通过jQuery函数中的apply调用,javascript,scope,Javascript,Scope,简单示例: 插件代码 (function($){ var app = {}; app.callfunction = function(fn,args) { //tried so far: window,null,this fn.apply(null,args); }; $.app = app; }(jQuery)); 插件的示例用法 $(function(){ var config = {
(function($){
var app = {};
app.callfunction = function(fn,args)
{
//tried so far: window,null,this
fn.apply(null,args);
};
$.app = app;
}(jQuery));
插件的示例用法
$(function(){
var config = {
url:'http://example.com',
loggedIn: false
};
for(var prop in config){
window[prop] = config[prop];
}
$.app.callfunction(function(a,b){
if(!loggedIn){ //Reference error: `loggedIn` is not defined
return false;
}
return a+b;
},[5,6]);
});
我不明白为什么
loggedIn
没有定义。即使尝试访问窗口
,它也会说这也是未定义的。有人能解释一下为什么会这样吗?我有没有办法在插件IEFE中存储对窗口的引用 您是否尝试过将$
作为应用程序的上下文?@AR7是。我什么都试过了。如果我用parantasis调用回调,而不是apply,它工作得很好,但是如果没有eval,就无法以这种方式解包参数,这是愚蠢的。天哪,我讨厌这种下流的语言。可能的解决方案,但有缺陷。您是否尝试将$
作为应用程序的上下文?@AR7是。我什么都试过了。如果我用parantasis调用回调,而不是apply,它工作得很好,但是如果没有eval,就无法以这种方式解包参数,这是愚蠢的。天哪,我讨厌这种下流的语言。可能的解决方案,但有缺陷。