在编写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中断?
答案 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等等。