Javascript jQuery插件中的私有变量

Javascript jQuery插件中的私有变量,javascript,jquery,plugins,global-variables,private,Javascript,Jquery,Plugins,Global Variables,Private,我正在制作一个jQuery插件,其中每个元素都应该有自己的变量。我认为正确的方法是: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <div>test 1</div> <div>test 2</div> <script language="javascript

我正在制作一个jQuery插件,其中每个元素都应该有自己的变量。我认为正确的方法是:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<div>test 1</div>
<div>test 2</div>
<script language="javascript">
$.fn.menu = function(options) {
    var defaults = {i : 0};
    this.each(function(){
        var parameters = $.extend(defaults, options); 
        $(this).on("click", function(event){parameters.i++;alert(parameters.i);});
    });
};
$("div").menu();
</script>

测试1
测试2
$.fn.menu=功能(选项){
var默认值={i:0};
这个。每个(函数(){
var参数=$.extend(默认值、选项);
$(this).on(“单击”,函数(事件){parameters.i++;警报(parameters.i);});
});
};
$(“div”).menu();
但它不起作用:parameters对象是全局的,因此在调用插件的所有元素之间共享


本例中有什么问题?

使用
var参数=$.extend(默认值,选项)
参数
引用(扩展)
默认值
对象

请记住,目标对象(第一个参数)将被修改, 也将从$.extend()返回

您需要创建一个新的对象引用,将空引用传递给jQuery
extend()
method:

var parameters = $.extend({}, defaults, options);
这相当于:

var parameters = $.extend(JSON.parse(JSON.stringify(defaults)), options); 

使用
var参数=$.extend(默认值、选项)
参数
引用(扩展)
默认值
对象

请记住,目标对象(第一个参数)将被修改, 也将从$.extend()返回

您需要创建一个新的对象引用,将空引用传递给jQuery
extend()
method:

var parameters = $.extend({}, defaults, options);
这相当于:

var parameters = $.extend(JSON.parse(JSON.stringify(defaults)), options); 

它不是全局性的,但您正面临关闭问题…为什么要在这里使用关闭?这不是一个循环,与您链接的已回答问题无关!此外,目标是显示最后的价值,我。。。这与闭包的意思相反。
每个
都在循环你的观点。但是,参数是在each()中定义的。请删除“已在其他地方修改”的内容好吗?问题不同,给出的答案与此不符。@如果您是正确的,您的问题是关于您正在扩展同一对象,请使用:
var parameters=$.extend({},默认值,选项)它不是全局性的,但您正面临闭包问题…为什么要在这里使用闭包?这不是一个循环,与您链接的已回答问题无关!此外,目标是显示最后的价值,我。。。这与闭包的意思相反。
每个
都在循环你的观点。但是,参数是在each()中定义的。请删除“已在其他地方修改”的内容好吗?问题不同,给出的答案与此不符。@如果您是正确的,您的问题是关于您正在扩展同一对象,请使用:
var parameters=$.extend({},默认值,选项)