javascript - 为什么在返回的表达式有效之前使用javascript函数对象?

标签 javascript

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

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

  2. 在什么情况下,我们应该向函数对象添加一个属性,例如 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/

相关文章:

javascript - Getter 应该是一个函数,但 "getters.doubleCounter"是 20 - VUEX 错误

java - WebDriver 从 Javascript CSS 下拉菜单中选择选项在 IDE 中工作,而不是在代码中工作

javascript - 是否可以在 IE8 中运行某些 HTML5 输入类型?

javascript - 如果单击按钮,则为表行着色

javascript - DOM 事件和 sencha 事件之间的事件顺序

javascript - 如何使用 Javascript 从 Python 字典中提取值?

javascript - 为什么javascript将0视为空字符串?

javascript - 为什么 Angulars JS 在 URL routeProvider 中给出错误?

javascript - 连接 MongoDB 时出错

javascript - AngularJS 自定义指令未加载