求解以下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);
}
展开
 我来答
灰常了dei
推荐于2016-05-28 · TA获得超过1736个赞
知道小有建树答主
回答量:596
采纳率:60%
帮助的人:633万
展开全部
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里面很深了,如果是学习不久,还是建议循序渐进
ikkileo
2017-05-15 · TA获得超过1151个赞
知道小有建树答主
回答量:398
采纳率:0%
帮助的人:169万
展开全部
因为这是个递归函数
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jv...9@sohu.com
2018-03-14 · 超过19用户采纳过TA的回答
知道答主
回答量:107
采纳率:66%
帮助的人:12.2万
展开全部
看你的配置写错没啊,加载都报错的话很可能是你的配置写的有问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式