无法弄清楚,为什么object innerMain
在每次选择更改时都会变小,尽管在每次调用object main
函数的开始都用trig()
的结构重新定义了它。 :
let innerMain = main;
var main = {
1: 0,
2: 0,
3: 0,
4: 0
};
$('#sel').on('change', function(){
trig($(this));
});
function trig(th = false){
let innerMain = main;
delete innerMain[th.val()];
console.log(innerMain);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="sel">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
<div id="result"></div>
答案 0 :(得分:3)
发生这种情况是因为您参照旧(innerMain
)变量创建了新变量(main
),并且每次调用delete时,都会为旧变量(main
调用它)
因此,您只有一个变量,可以对其进行修改。
您应该创建没有引用的新变量。 运作方式,您可以在 MDN 上阅读: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
有效:
var main = {
1: 0,
2: 0,
3: 0,
4: 0
};
$('#sel').on('change', function(){
trig($(this));
});
function trig(th = false){
let innerMain = Object.assign({}, main);
delete innerMain[th.val()];
console.log(innerMain);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="sel">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
<div id="result"></div>