0

我试图更清楚地理解这一点。当我扩展修改Array原型中的每个函数时,调用func(this [i])如何调用传递给Array.each的函数。

由于函数定义是 function(func) 而 func 是参数。

func =function(i) { alert(i) }和因此func(this[i]) = { function(this[i]) { alert(this[i]) }吗?

Array.prototype.each = function(func) {
  for (var i=0; i<this.length; i++) {
    func(this[i]);
  }
};

[1,2,3].each(function(i) {
  alert(i);
});
4

4 回答 4

1

是的,function(func) 基本上是一个带有参数 'func' 的匿名函数

于 2013-01-16T16:02:42.500 回答
1

请注意,JS 中的每个函数都只是一个对象。所以func传递给each函数的参数是一个对象,它是一个函数。

所以调用func(aParam)你得到func参数(它实际上是一个函数)并调用它传递相应的参数。

于 2013-01-16T16:05:22.537 回答
0

在您的示例中: func = function(i) { alert(i); }

于 2013-01-16T16:06:34.520 回答
0

在对象内部,this将假设实例化原型的上下文(在 JS 中,每种类型基本上都是某个原型的对象实例,因此每种类型都有自己的原型,可以从中创建新对象)。因此,在这种情况下,this将引用从Array原型创建的对象(即[1,2,3])。

将匿名函数传递给每个方法,允许该方法将i位置处的元素传递给您传递给它的函数(回调)。

我解释:

iter #1: this => [1,2,3] ; i => 0 ; func => (function(i){ alert(i); })(this[i]) => 1
iter #2: this => [1,2,3] ; i => 1 ; func => (function(i){ alert(i); })(this[i]) => 2
iter #3: this => [1,2,3] ; i => 2 ; func => (function(i){ alert(i); })(this[i]) => 3

你可以读this[i][1,2,3][i].

于 2013-01-16T16:15:58.867 回答