Как использовать setTimeout() в Coffeescript
Я не могу использовать 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);
На консоль ничего не печатается.
Ответы
Ответ 1
run = () ->
console.log("run was called!")
setTimeout(run, 1000)
Вы полагаетесь на javascript function hoisting для функций, объявленных с синтаксисом function run(){}
, но coffeescript объявляет их как переменные: var run = function(){}
, поэтому вам нужно определить перед тем, как вы ссылаетесь на него, в противном случае он все равно undefined
, когда вы передадите его на setTimeout
.
Ответ 2
Анонимный вариант:
Питер точно прав. Но вы также можете использовать setTimeout
без объявления переменной:
setTimeout ->
console.log 'run was called!'
, 1000
Урожайность:
(function() {
setTimeout(function() {
return console.log("run was called!")
}, 1e3)
}).call(this);