从另一个脚本访问javascript变量

我有以下结构

// script1.js jQuery(document).ready(function($) { var somevar; $('somelem').myPlugin(); }); // script2.js (function($) { $.fn.myPlugin = function(options) { // access and modify 'somevar' here so that it gets modified // in the function which called a plugin }; }); 
  • 我希望’somevar’变量能够被插件修改,我可以在插件调用函数的作用域中进一步处理已修改的变量。
  • 我不想使用全局变量。
  • 我认为没有使用将变量作为选项传递给插件,因为它将成为插件函数的本地,并且修改不会像我理解的那样修改原始变量。
  • 我可能会误解javascript如何工作的概念,所以任何答案都会受到赞赏。

传递基本类型时,它将按值传递。 但是,如果你传递一个对象,那么它将通过引用传递。 所以,你可以这样做 –

 jQuery(document).ready(function($) { var somevar = {val: 5}; $(document).myPlugin(somevar); alert(somevar.val); }); // script2.js (function($) { $.fn.myPlugin = function(options) { options.val ++; // access and modify 'somevar' here so that it gets modified // in the function which called a plugin }; })(jQuery); 

看现场演示:: http://jsfiddle.net/rifat/EdRFm/

您可以为全局变量创建单例类。

您可以让插件函数返回一个值并将其分配给somevar

 somevar = $('someelem').myPlugin(); 

或者您可以将回调作为参数传递给插件方法

 // Script 1 var somevar; $('someelem').myPlugin(function(newValue) { somevar = newValue; }); // Script 2 $.fn.myPlugin = function(callback) { ... callback(newValueForSomeVar); } 

您可以编写将从变量设置值的函数,然后在另一个脚本中调用她。

 //script1.js var somevar; function setSomevar(value){ somevar = value; } function getSomevar(){ return somevar; } jQuery(document).ready(function($) { $('somelem').myPlugin(); }); 

现在,您可以调用函数setSomevar并将值传递给变量。 我希望有所帮助。 最好的祝福。