Насколько мне известно, но вы можете имитировать его, сначала инициализируя функцию null
, а затем заменяя реализацию позже.
var foo = null;
var bar = function() { alert(foo()); } // Appear to use foo before definition
// ...
foo = function() { return "ABC"; } /* Define the function */
bar(); /* Alert box pops up with "ABC" */
Этот трюк похож на трюк C # для реализации рекурсивный lambdas, как описано здесь .
Единственный недостаток заключается в том, что если вы do используете foo
до его определения, вы получите сообщение об ошибке для попытки вызвать null
, как если бы это была функция, а не более описательное сообщение об ошибке. Но вы ожидаете получить сообщение об ошибке для использования функции до ее определения.