我在使用$ timeout时遇到了麻烦,并在此网站上偶然发现了这个解决方案:
How to run function with parameters using $timeout in AngularJS?
虽然这回答了“如何”,但它没有解决“为什么”。当你想推迟执行需要参数的函数时,使用$ timeout,为什么必须将它包装在一个匿名函数中,为什么这对于无参数函数来说也不是必需的呢?
答案 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"
。