我读了一篇关于how speed up javascript的文章,我尝试复制它的代码,这可以提高循环速度:
var chunk = function (array, process, context) {
setTimeout(function(){
var item = array.shift();
console.log('item', item);//this could show correctly
process.call(item, context);
if (array.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100);
}
然后我尝试将参数传递给它,但我不知道如何使用context
参数,我所做的是:
var dosomething1 = function (item) {
console.log('this is begin ' + item)
}
var dosomething2 = function (item) {
console.log('this is end ' + item);
}
var process = function (item) {
console.log(item); //this show undefined
dosomething1(item);
dosomething2(item);
}
var temp = ["a", "b", "c", "d"];
chunk(temp, process);
问题始于流程函数item
日志undefined
,该项目只能在chunk
中正确显示。
那么如何解决这个问题?我认为它与process.call
方法有关?它与上下文参数有关吗?
您可以看到演示here
答案 0 :(得分:1)
您将上下文作为第一个参数传递给call
,process.call(context, item);
。虽然您从未将上下文的参数传递给chunk
,因为您从未使用this
,因此这不是问题。
答案 1 :(得分:0)
是的,你是对的。 .call方法是javascript中继承的概念,.call方法中的第一个参数用于将当前对象传递给它的超类,第二个参数用作普通参数。试试这个,
var chunk = function (array, process, context) {
setTimeout(function(){
var item = array.shift();
console.log('item', item);//this could show correctly
process.call(this, item);// the first parameter is the current object
if (array.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100);
}
答案 2 :(得分:0)
函数的call
方法使用指定的this
调用函数。您可以通过函数内的item
关键字访问您传递函数的第一个参数(在本例中process.call(item, context)
调用this
)。
因此,请将此更改正确引用:
var process = function () {
console.log(this);
dosomething1(this);
dosomething2(this);
}