首页 > 解决方案 > 为什么在返回的表达式有效之前使用javascript函数对象?

问题描述

为什么下面的 javascript 代码片段有效。

  1. 我无法弄清楚为什么require1变量可以在主体本身中使用,即使在函数表达式返回之前也是如此。

  2. 在什么情况下,我们应该向函数对象添加一个属性,比如require1.cache,而不是仅仅声明一个函数并使用function(){}并在require1函数体中使用它。

    const require1 = (name)=> {
        console.log(require1.cache);
    };
    require1.cache = {name:'test'};
    
    require1('test');
    

标签: javascript

解决方案


该函数不会立即评估- 该函数首先被分配给变量 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();


推荐阅读