如何将变量传递给 $timeout

3
我有以下代码...
$timeout(function(test){
  console.log(test.num);
},0, true, {num:9});

然而,测试始终为null,那我应该如何传入变量?
2个回答

3

您的代码是正确的。然而,您正在运行一个不支持第四个参数的旧版本AngularJS。您需要至少1.4.0版本。

通常情况下,您不必显式传递参数,因为它们在封闭作用域中定义,并且在闭包中可见。这也可以工作:

var param = {num:9};
$timeout(function(){
  console.log(param.num);
});

如果您需要显式地传递参数——通常是因为您必须保留某些变量的值——@Pankaj-Parkar的答案提供了一个很好的解决方法。然而,我更喜欢这种写法:
$timeout((function(test) {
    return function() { console.log(test.num) }
})({num: 9}));

哦我的天,你是对的,我完全以为我正在运行1.4版本。 - Jackie
我仍然在失去变量,我认为这是因为它在一个for循环中,而我正在尝试获取索引。这就是为什么我需要它这样的原因。 - Jackie
你是对的,在这种情况下,你必须保留计数器的值。如果你不喜欢立即调用函数,你也可以在循环体内使用额外的变量。 - lex82
@lex82 是的,IIFE 在这里非常好用,这就是我所做的...因为它将限制变量的作用域。它们不会受到外部环境的影响。 - Pankaj Parkar
我会假设在ECMA6中这一切都是不同的,哈哈。 - Jackie

2
你可以将它变成自调用函数。
(function(test){
  $timeout(function(){
     console.log(test.num);
  },0, true, {num:9});
})({num: 11});

无论如何,如果你在外部定义了test,那么你的$timeout将会使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接