为什么下面的 JavaScript 代码片段有效。
我无法弄清楚为什么 require1 变量可以在主体本身中使用,甚至在函数表达式返回之前也是如此。
在什么情况下,我们应该向函数对象添加一个属性,例如 require1.cache,而不是仅仅声明一个函数并使用 function(){} 并在 require1 函数体中使用它。
const require1 = (name)=> { console.log(require1.cache); }; require1.cache = {name:'test'}; require1('test');
最佳答案
该函数不会立即求值 - 函数首先分配给变量名require1
,然后稍后 em>,一旦调用,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();
关于javascript - 为什么在返回的表达式有效之前使用javascript函数对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52197210/