繁体   English   中英

javascript关闭的困惑

[英]confusion of javascript closure

我正在研究JavaScript闭包。
我想用闭包进行模块化。
所以我写了代码,但没有得到想要的结果
我想要结果box1和box2不同的结果。 但是由于某种原因却得到了相同的结果。
我该怎么办?

 var spinBox = function() { var spinBoxConfig; return { create: function(config) { spinBoxConfig = { value: typeof config.value === 'number' ? config.value : 200 } return this; }, getValue: function() { return spinBoxConfig.value; } } }() var box1 = spinBox.create({ value: 30 }); var box2 = spinBox.create({ value: 310 }); console.log(box1.getValue()); // same console.log(box2.getValue()); // same 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

定义Spinbox对象时,只需创建一次闭合。 调用create或getValue的所有内容都将与spinBoxConfig的单个实例进行交互。 如果您想在每次调用create时创建全新的闭包,则需要在create函数中进行。

 var spinBox = { create: function (config) { var spinBoxConfig = { value: typeof config.value === 'number' ? config.value : 200 } return { getValue: function () { return spinBoxConfig.value; } } } } var box1 = spinBox.create({ value: 30 }); var box2 = spinBox.create({ value: 310 }); console.log(box1.getValue()); console.log(box2.getValue()) 

尽管确实如此,但是spinBoxconfig有点过头了,因为您的闭包中已经有config参数,并且它具有所有相关数据。 因此,您可以这样做:

 var spinBox = { create: function (config) { if (typeof config !== 'number') { config = 200; } return { getValue: function () { return config; } } } } var box1 = spinBox.create(30); var box2 = spinBox.create(310); console.log(box1.getValue()); console.log(box2.getValue()) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM