据说nodejs在执行js文件时,在调用具有全局范围的函数时会将this
绑定到模块上下文,如下所示:
function father(){
this.id=10
}
father();
console.log(module.id);
它实际上打印的是“。”,而不是我预期的“10”。如果module是要访问的关键字,我试过这个:
(function (exports, require, module, __filename, __dirname) {
father();
console.log(module.id);
})()
但是这一次,它在console.log(module.id)
的行中抛出了一个异常,说
“TypeError:无法读取未定义的属性'id'。
最后,我尝试了这个:
console.log(this===module);
console.log(this===global);
function f1(){console.log(this===module);}
function f2(){console.log(this===global);}
function g1(){
return function(){console.log(this===module);};
}
function g2(){
return function(){console.log(this===global);};
}
f1();
f2();
g1()();
g2()();
打印好了:
false
false
false
true
false
true
与建议的第一个答案不一样。所以我想知道如何在js文件中使用“module”关键字,这是由Nodejs执行的?
最后一次尝试:
function h(){this.a='abc';}
h()
console.log(module.exports.a);
我希望打印“abc”,但仍打印“undefined”
感谢。
答案 0 :(得分:2)
它表示nodejs在执行js文件时会绑定"这个"到模块上下文
是 No,它已绑定到exports
。如果你把
console.log(this === module.exports); // or just `exports`
在您的文件中,它会记录true
。
调用具有全局范围的函数时
没有。模块范围中的this
值与函数或它们的调用方式无关。在草率模式下,明确调用的函数中的this
值将是全局对象,但它与module
对象不同。
function father() {
console.log(this === global);
}
father(); // true