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,就无法以这种方式解包参数,这是愚蠢的。天哪,我讨厌这种下流的语言。可能的解决方案,但有缺陷。