我不知道为什么console.log(Set.current_index)
会显示0
而不是3
。
var Set = (function() {
var set = [];
var index = 0;
function contains(set, e) {
for (var i = 0; i < set.length; i++) {
if (set[i] === e) {
return true;
}
}
return false;
}
var add = function(e) {
if (!contains(set, e)) {
set[index++] = e;
}
}
var show = function() {
for (var i = 0; i < set.length; i++) {
console.log(set[i]);
}
}
return {
add: add,
show: show,
current_index: index
};
})();
Set.add(20);
Set.add(30);
Set.add(40);
Set.show();
console.log(Set.current_index);
答案 0 :(得分:4)
由于写入current_index
只获取{em>初始值index
- 它不反映对该值的任何更改,因为该变量是 primitive type。
如果您有“引用类型”(即对象或数组),则对其内容的更改将在引用同一对象的任何其他变量中可见。原始类型不会发生这种情况,它们会“按值”复制到新变量中,对原始变量的更改不会影响副本。
您需要将current_index
转换为函数,以返回index
的当前值,或将其写为getter
,以便您处理{ {1}}作为只读属性,通过无形地调用函数来返回当前值。
有关后一种方法的示例(需要ES5或shims来复制功能),请参阅http://jsfiddle.net/alnitak/WAwUg/,用以下内容替换当前的.index
块:
return
答案 1 :(得分:1)
除了变量引用对象外,Javascript总是按值传递。因此, current_index 的初始化只获得 index 的初始值,而不是永久地指向变量,因此在初始化之后,这两个变量是分开的,因此递增< strong> index 不会增加 current_index 。