求解以下JS是什么意思 尤其是arguments.callee和process.call(context, item);
vardata=[12,123,1234,453,436,23,23,5,4123,45,346,5634,2234,345,342];functionchunk(arr...
var data = [12,123,1234,453,436,23,23,5,4123,45,346,5634,2234,345,342];
function chunk(array, process, context){
setTimeout(function(){
var item = array.shift();
process.call(context, item);
if (array.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100);
} 展开
function chunk(array, process, context){
setTimeout(function(){
var item = array.shift();
process.call(context, item);
if (array.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100);
} 展开
展开全部
arguments是函数默认的参数,而arguments.callee指的是函数本身,针对这个函数,它也可等于chunk()。而call()函数就是用一个函数对象替换另一个函数对象。即用context替换process,也就是说process可以用context里面的方法,而item是传入的参数。这个比较难懂,call()实现了JS的伪继承,这个要想理解要多去看看JS深层的一些东西
追问
大神 那为什么不直接设置
function chunk(array, process, context)的时候把process去掉或者写两个context
这样不是不用使用process.call(context, item)了吗?
追答
这就关系到继承了,有时候就不得不这样写
function fun1() {
this.a = 123;
this.add = function () { return this.a }
}
function fun2() {
this.a = 456;
}
var f1=new fun1()
var f2=new fun2()
var a = f1.add.call(f2); //返回456
你看上面这一坨东西,fun1()里面有个属性a=123;fun2()里面有个属性a=456;现在fun1()里面的方法add要用fun2()里面的属性a,那就要fun2()里面的a要去替换fun1()里面的a,这就相当于一个继承了。这只是一个简单的属性,还可以继承函数对象里面的方法,总之在JS里面很深了,如果是学习不久,还是建议循序渐进
展开全部
因为这是个递归函数
var data = [12,123,1234,453,436,23,23,5,4123,45,346,5634,2234,345,342];//这是个数组
function chunk(array, process, context){ //函数传入三个参数,第一个是个数组参数
setTimeout(function(){ //函数内的函数,传入了俩参数第一个参数是个函数,第二个100
var item = array.shift(); //获取并删除数组的第一个元素
process.call(context, item); //执行一个冒充方法的继承函数,这一段相当于context(item)
if (array.length > 0){ //判断数组中是否还有值
setTimeout(arguments.callee, 100); //如果数组还有值,那么再次执行一次自己
}
}, 100);
}
var data = [12,123,1234,453,436,23,23,5,4123,45,346,5634,2234,345,342];//这是个数组
function chunk(array, process, context){ //函数传入三个参数,第一个是个数组参数
setTimeout(function(){ //函数内的函数,传入了俩参数第一个参数是个函数,第二个100
var item = array.shift(); //获取并删除数组的第一个元素
process.call(context, item); //执行一个冒充方法的继承函数,这一段相当于context(item)
if (array.length > 0){ //判断数组中是否还有值
setTimeout(arguments.callee, 100); //如果数组还有值,那么再次执行一次自己
}
}, 100);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看你的配置写错没啊,加载都报错的话很可能是你的配置写的有问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询