为什么$ timeout需要带有参数的函数包装在匿名函数中?

时间:2015-03-10 18:08:24

标签: angularjs

我在使用$ timeout时遇到了麻烦,并在此网站上偶然发现了这个解决方案:

How to run function with parameters using $timeout in AngularJS?

虽然这回答了“如何”,但它没有解决“为什么”。当你想推迟执行需要参数的函数时,使用$ timeout,为什么必须将它包装在一个匿名函数中,为什么这对于无参数函数来说也不是必需的呢?

3 个答案:

答案 0 :(得分:1)

因为最后调用回调函数时,它被调用而没有任何参数。

答案 1 :(得分:0)

  

为什么$ timeout需要包含参数的函数   匿名函数?

$timeout不会将要求函数包装在匿名函数中。只是$timeout不是你的函数的朋友,可以这么说,并且不会将参数传递给你给他的函数。因此,给他一个与参数一起工作的函数是没有意义的。

答案 2 :(得分:0)

$timeout在参数中接受一个函数,并且将调用此函数而不带参数。

例如$timeout(foo)将导致foo()被调用,没有参数,即使foo应该适用于某些参数。

所以人们通常做的是将foo的调用包装到一个匿名函数中更快,但它可以完全是一个命名函数,例如在这个例子中:

function foo(name) { alert('hello ' + name) }
function fooBar()  { foo('bar') }

$timeout(fooBar)
// or, as this is totally equivalent
$timeout(function() { foo('bar') })

现在提供您的信息Javascript允许您使用关键字bind将参数绑定到函数。所以我们上面的例子也等同于:

$timeout(foo.bind(null, 'bar'))

实际上,foo.bind(null, 'bar')也是一个等同于fooBar的新功能,foo其中this设置为null(因为它未被使用)无论如何)并且参数name被强制为"bar"