0

所以今天看起来像这样:

$$('input').each(function() {
 // do something
});

那和这有什么区别:

$$('input').each( // do something );

第一个示例中的私有函数在 for 循环范围内,因此在其他任何地方都不可引用,那么拥有它有什么好处呢?

4

3 回答 3

2

这不是私有函数,它只是一个匿名函数(没有名称的函数)。

你可以这样做:

$('input').each(function() {
 // do something
});

或者你可以这样做:

function foo() {
 // do something
}
$('input').each(foo);

无论如何,该.each方法需要一个函数作为回调的参数。

于 2012-03-23T14:53:39.167 回答
2

匿名函数知道它当前的作用域和变量。

function a() {
   var foo = 'test';
   $('something').each(function() {
      alert(foo);
   })
}

该函数会提醒“测试”,因为foo它是在其范围内定义的。

function a() {
   var foo = 'test';
   $('something').each(b)
}

function b() {
   alert(foo);
}

此函数将导致一个 JavaScript 错误,指出该变量foo未定义。

如果您需要定义一个只在确切范围内有意义的函数,并且不想抛出大量变量或重新计算很多东西,那么定义一个匿名函数会更舒服。

于 2012-03-23T15:00:44.303 回答
1

第一个函数不是私有的。它可以引用包含范围内的所有变量以形成一个闭包,因为 JavaScript 具有词法范围。

第二个函数几乎是一样的,除了你唯一能做的就是为它提供一个函数名,否则你会得到一个语法错误。

简短的回答:你把函数语句放在那里做不止一件事,或者做一件事并提供参数。

于 2012-03-23T14:53:31.290 回答