标题不知该如何表达(⊙﹏⊙)
数组莫名变这么多位
handleStrip1: function(strip,num) {
var i = 0, self = this , len = strip.length;
strip.push(self.duration) //在这添加的
if(!(len>0))return;
for (i; i < len; i++) {
console.log("当前的sum = "+strip[i]);
if(strip[i]>num){
return +i;
}
}
}
handleStrip1函数(被setInterval方法每50毫秒调用),第一个参数strip传的的是这个对象的属性,匿名函数中的变量不是函数运行结束后就销毁了吗,为什么会影响到这个对象的属性呢?
function AA() {
this.strip = data;
}
AA.prototype = {
init : function() {
var self = this;
self.timer = setInterval(self.run.bind(self), 50);
},
run : function() {
var self = this;
self.curStrip = self.handleStrip1(self.strip,(self.Audio.currentTime).toFixed(2));
}
};
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为
strip是按引用传递的,所以你一直在对同一个strip进行 push 操作。不就是按照50ms调用一次去执行一个函数吗?
过了那么就的时间,当然很长了。
你需要纠正下这个概念。
js 中的参数传递分为按值传递和引用传递。
你使用的引用传递,进行的操作肯定是会同步到外部的
又是万恶的闭包...是这样的,因为你在匿名函数里面使用了不在该作用域的属性,他首先在自己里面找,咦,没找到,接着向上找,这个时候找到了上一级的属性,此时二者是引用关系,至于为什么是引用,是因为其实这些属性是放在一个我们看不到的对象里面在的,官方名字我忘了~...所以此时你修改的时候会影响到外面的东西,并且因为你引用了,所以即使这个函数被销毁了,但是刚刚的那个对象还是存在引用关系,就是这样,喵~
如何解决:
var that = strip把that传进去试试