node中模块的默认封装,直接打印this和包装后的this,为什么可以使用 __filename 等变量

首先我们新建一个js文件,然后直接打印this,再在立即执行函数中打印this,看一下区别

 我们发现,直接打印this并不会得到全局global对象,这是因为在node中,node对js文件进行了包装

包装如下,这个默认的外层包装也是我们可以在js文件中直接使用,exports, require,module,__filename, __dirname的原因。

(function(exports, require, module, __filename, __dirname) {
    // 这里面就是我们肉眼看到js文件的内容
    // 此时的this === module.exports
})()

可以直接打印 arguments.callee.toString() 查看这个默认的封装函数

 

 而在立即执行函数中的this,指向全局变量global

let name = 1111
// 挂载在全局变量
global.name = 333;
(
    function foo() {
        let name = 222;
        console.log(this.name)
    }
)()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值