以下立即执行并完全忽略超时
var print = function(){
console.log('hey');
}
$timeout(print(), 2200);
但这完全没问题
$timeout(function(){console.log('hey')}, 2200);
为什么我不能使用包含该函数的变量?
答案 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;
答案 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
的变量,指向一个函数。你现在可以用它做两件事
虽然不是很明显,但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