2012-08-08 56 views
0

我读到一篇文章关于how speed up javascript,我试图复制它的代码可能提高循环速度:混淆关于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

是的,你说得对。 .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); 
} 
1

您通过上下文作为第一个参数来callprocess.call(context, item);。虽然你永远不会将上下文的论点传递给chunk,但这不是问题,因为你从不使用this

http://jsfiddle.net/NrBmD/2/

0

函数的call方法调用与指定的this功能。您传递函数的第一个参数(在您拨打process.call(item, context)的电话中为item)将通过函数中的this关键字访问。

所以,进行此更改正确引用:

var process = function() { 
    console.log(this); 
    dosomething1(this); 
    dosomething2(this); 
}