在定义第一个函数之前,在另一个函数中使用函数

时间:2014-09-18 15:51:41

标签: javascript function hoisting

在编写API时,我倾向于将函数放在自上而下的顺序中,最常见的函数位于顶部,辅助函数位于底部。但是,在使用var而不是魔术function定义来定义函数时,在定义函数之前不能使用该函数。那么如果我们有一个名为$company的对象并且我们正在定义其方法呢?我能以这种方式安全地订购我的JS吗?

var $company = {};

$company.foo = function(x) {
    $company.bar(x*x); // used in definition, but not called directly - ok?
};

// $company.bar(6) // this would produce an error

$company.bar = function(x) {
    alert(x);
};

它似乎适用于我当前版本的Firefox,但我想知道它是否已定义行为。是否有任何版本的IE中断?

2 个答案:

答案 0 :(得分:2)

是的,你可以。

仅定义函数,而不执行。

JS引擎执行文件的每一行:

var $company = {};
$company.foo = ...;
$company.bar = ...;

之后,在执行$company.foo时,$company.bar已定义!

答案 1 :(得分:0)

是的,这是有效的,因为没有浏览器(或没有JavaScript引擎)对.的权利做出假设,直到它必须评估左边的表达式。

但很多人不喜欢这种"展望未来"并使用回调函数:

 $company.foo = function(x, callback) {
      callback(x*x);
 }

这段代码更明显,更灵活,因为它几乎可以调用任何东西,你可以curry等等。