1

在编写 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 出现这种情况?

4

2 回答 2

1

是的你可以。

函数只被定义,不被执行。

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

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

后来,在$company.foo执行时,$company.bar被定义!

于 2014-09-18T15:58:29.327 回答
0

是的,这是可行的,因为没有浏览器(或没有 JavaScript 引擎)对 a 右侧的内容做出假设,.直到它必须评估左侧的表达式。

但很多人不喜欢这种“向前看”,而是使用回调函数:

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

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

于 2014-09-18T15:59:53.740 回答