javascript - 为什么在返回的表达式有效之前使用javascript函数对象?
问题描述
为什么下面的 javascript 代码片段有效。
我无法弄清楚为什么require1变量可以在主体本身中使用,即使在函数表达式返回之前也是如此。
在什么情况下,我们应该向函数对象添加一个属性,比如require1.cache,而不是仅仅声明一个函数并使用function(){}并在require1函数体中使用它。
const require1 = (name)=> { console.log(require1.cache); }; require1.cache = {name:'test'}; require1('test');
解决方案
该函数不会立即评估- 该函数首先被分配给变量 name require1
,然后稍后,一旦它被调用,require1.cache
就会起作用,因为require1
已被分配给。如果在分配之前立即调用该函数,那么您是对的 - 将引发错误,因为require1
此时尚未定义。
但是,向函数添加属性是非常糟糕的做法——最好使用外部变量、对象或使用构造函数 ( new
) 并分配给实例化。例如:
class require {
constructor(cache) {
this.cache = cache;
}
log() {
console.log(this.cache);
}
}
const require1 = new require({ name: 'test' });
require1.log();