我似乎不能使用setTimeout()来调用我自己的函数。我可以使用setTimeout调用alert(),但不能调用我自己编写的函数。下面是重现问题的最简单的代码:
我有以下coffeeScript
setTimeout(run, 1000)
run = () ->
console.log("run was called!")
它会生成以下Javascript
// Generated by CoffeeScript 1.6.3
(function() {
var run;
setTimeout(run, 1000);
run = function() {
return console.log("run was called!");
};
}).call(this);
控制台中不会打印任何内容。
发布于 2013-10-30 01:04:54
run = () ->
console.log("run was called!")
setTimeout(run, 1000)
使用function run(){}
语法声明的函数依赖于javascript function hoisting,但是coffeescript将它们声明为变量:var run = function(){}
,因此必须在引用函数之前定义它,否则当您将它传递给setTimeout
时,它仍然是undefined
。
发布于 2015-03-24 12:02:14
匿名选项:
彼得是完全正确的。但您也可以不声明变量而使用setTimeout
:
setTimeout ->
console.log 'run was called!'
, 1000
收益率:
(function() {
setTimeout(function() {
return console.log("run was called!")
}, 1e3)
}).call(this);
https://stackoverflow.com/questions/19664481
复制相似问题