app.js中导入的模块函数不能访问类实例化或app.js变量.Javascript节点



我有工作代码,失败时,我试图将其分割成模块,这是一个超级简化的版本,以突出我不理解的行为。

当app.js运行时,有一个'ReferenceError: elf1 is not defined'。我不明白为什么func1不能访问elf1。我想也许把func1从标准函数改为箭头函数会使func1在词法上作用域为app.js。

我意识到在App.js中我可以声明global.elf1 = new Elf(),然后func1.js将有访问权。但是,我不明白为什么当模块中的箭头函数在app.js环境中调用时,它无法访问app.js变量环境。

我相信这很简单,我忽略了一些明显的行为,我认为func1是一个箭头函数,可以访问app.js环境变量,因为它在app.js中被调用。

//App.js
let Elf = require('./class');
let func1 = require('./func');
var elf1 = new Elf('jim');
func1();
---------------------------------------
//class.js
class Elf{
constructor(name){
this.name = name;
}
shout(){
console.log(`my name is ${this.name}`);
}
}
module.exports = Elf;
----------------------------------
//func.js
let func1 = ()=>{
elf1.shout()
}
module.exports = func1;

funcs .js不知道elf1是什么,因为它在模块作用域之外。

我将把elf1作为参数传递给func1函数。

//App.js
let Elf = require('./class');
let func1 = require('./func');
var elf1 = new Elf('jim');
func1(elf1);
//func.js
let func1 = (elf1)=>{
elf1.shout()
}
module.exports = func1;

最新更新