将数据传递给封装的javascript代码

将数据传递给封装的javascript代码,javascript,jquery,Javascript,Jquery,在我的webapp中,我有这样一个变量 var data = { getItem: function(key){ ... } } 在我所有的脚本中,我都可以使用 data.getItem("Test"); 但是如何在jquery插件中使用它呢?插件通常具有以下结构 (function($, window, document) { //....plugin-code }); (function($) { // plugin-

在我的webapp中,我有这样一个变量

var data = {
     getItem: function(key){
         ...
     }
}
在我所有的脚本中,我都可以使用

data.getItem("Test");
但是如何在jquery插件中使用它呢?插件通常具有以下结构

(function($, window, document) {   
     //....plugin-code
});
(function($) {   
    // plugin-code
})(jQuery);

我怎么称呼这种结构?可以在这样的插件中使用我的全局数据变量吗?

如果您的数据变量是全局的,那么您可以在任何地方使用它,包括jQuery插件内部


您需要确保在将要使用数据的任何自执行函数之前定义了数据。

实际上,它们往往具有结构

(function($, window, document) {   
     //....plugin-code
});
(function($) {   
    // plugin-code
})(jQuery);
要点是

  • 他们可以假设此范围内的$始终是jQuery,而不管加载了定义$的任何其他内容,例如prototype
  • 所有内容都在这个闭包中定义,因此只有您选择公开的内容(通过
    $.fn
    $.extend
    )才会泄露给外部世界
  • 显然,如果只是您的环境中的插件,您可以假设您总是运行$=jQuery,那么您就不需要这些。(您的也有文档和窗口:我从未见过这些被重写,我不确定除了文档和窗口本身之外,您在这里会传递什么作为参数?)

    你是在问关于在插件内部定义数据还是从插件范围之外把数据拉进来?您可以在内部编写的内容没有限制,因此,如果您在内部定义并使用它,那么您的代码将与以前完全一样工作。如果需要从外部访问内部定义的数据,则需要以某种方式将其泄漏出去,例如,向$、文档或窗口中的一个添加访问器方法


    如果您从插件范围外提取数据,那么您仍然可以从闭包内部访问全局变量,或者您可以将其作为额外参数传入-我认为这不会有任何区别。

    是的,这应该是可能的(除非
    数据
    标识符被插件中更局部的变量/参数遮住了。)“立即调用”而不是“自动执行”@Sime有趣的技术点。谢谢。这里有更多信息,请关注: