当我将预定义函数作为第一个参数传递时,为什么不会超时工作?

时间:2016-12-01 15:21:02

标签: angularjs

以下立即执行并完全忽略超时

var print = function(){
console.log('hey');
}
$timeout(print(), 2200);

但这完全没问题

$timeout(function(){console.log('hey')}, 2200);

为什么我不能使用包含该函数的变量?

6 个答案:

答案 0 :(得分:2)

$timeout构造函数的第一个参数是函数,而不是函数的调用。

将其更改为$timeout(print, 2200);,这应该可以正常工作:)

您可以在此处详细了解$timeout服务:https://docs.angularjs.org/api/ng/service/ $ timeout

希望有所帮助!

答案 1 :(得分:1)

这是不正确的:

var print = function(){
console.log('hey');
}
$timeout(print(), 2200);

传递函数的正确形式是:

var print = function(){
console.log('hey');
}
$timeout(function(){
    print()
}, 2200);

因为$ timeout在第一个参数中需要一个函数。

您能否在Angular Doc

中阅读此内容

答案 2 :(得分:1)

仅使用print

var print = function(){
    console.log('hey');
}
$timeout(print, 2200);

以下是jQuery函数setTimeout()的工作示例



var print = function(){
  console.log('hey');
}
setTimeout(print, 2000);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

var print = function(){
console.log('hey');
}
$timeout(print, 2200);

答案 4 :(得分:0)

$timeout(print, 2200);

从函数

中删除paranthesis

答案 5 :(得分:0)

已经有一些答案显示如何解决它,但回答你的问题:

  

为什么我不能使用包含该函数的变量?

问题是,你可以,但那不是你正在做的事情。当您创建这样的函数时:

var print = function(){
    console.log('hey');
}

最终得到一个名为print的变量,指向一个函数。你现在可以用它做两件事

  1. 将其作为函数传递
  2. 调用它并获取结果
  3. 虽然不是很明显,但JavaScript中的每个函数都会返回结果。你的功能相当于:

    var print = function(){
        console.log('hey');
        return undefined;
    }
    

    因此,当您使用超时时,您需要函数作为第一个参数。由于调用print()函数会产生一个结果(undefined),这不是超时函数所需要的。

    所以回顾一下:

    <强>正确

    $timeout(print, 2200); // Pass the function as an argument
    

    <强>不正确

    $timeout(print(), 2200); // Pass the value undefined as an argument