发现问题:
今天做的一个js页面,初始化设置的全局变量,在方法中,传递给局部变量;
后来尝试直接删除全局变量,只用局部变量设为一个空数组试试。发现这里的oldWorkOrderIds数据不会保存,在下次点击的时候,之前的数据就没了;
但是之前虽然使用了全局变量,但是每次点击按钮, 只用到了一次,主要还是使用的oldWorkOrderIds;
initialize: function() { this.workOrderIds = []; }, afterRender: function() { this.$('.js-icheck').icheck(); }, // 点击单行事件 onClickRow: function(e) { var $target = $(e.target); var oldWorkOrderIds = this.workOrderIds; // 如果是 icheck if ($target.prev().hasClass('js-list-check')) { if ($target.prev().icheck('isChecked')) { $target.prev().icheck('uncheck'); for (var i = 0; i < this.workOrderIds.length; i++) { if (this.workOrderIds[i] === $target.parents('.js-my-task-li').attr('id')) { this.workOrderIds.splice(i, 1); break; } } }
思考:
会不会是把全局变量赋给局部变量后,并不是值传递,而是引用传递;
var oldWorkOrderIds = this.workOrderIds;
然后通过调试界面试了下,oldWorkOrderIds 和this.workOrderIds一直是相等的;
结论:
在js中,将全局变量赋给局部变量,是引用传递,不是值传递;
tips:
数组数据直接使用workOrderIds[0] 等同于this.workOrderIds[0]
之前一直以为this.workOrderIds[0]这种格式是不正确的,其实两者是一样的。