“var self = module.exports;”是什么意思

what does "var self = module.exports;" mean?

本文关键字:是什么 意思 exports module var self      更新时间:2023-09-26

我看到了一行代码:

var self = module.exports ;

在 NodeJS 项目中。

我知道"module.export"的含义,但我找不到有关此代码的任何信息。有人可以帮助我吗?

大多数情况下,人们使用名为 self 的变量来存储对可能在另一个函数上下文中被覆盖的内容的引用。(它可以被称为任何东西:_thisthat等)

例:

    var lib = require('lib');
    var self = module.exports;        
    function exportModule(module) {
        // note that 'module' now refers to this function's argument
        // but that's ok because I stored 'module.exports' in 'self' earlier
        for(var p in module) {
           self[p] = module[p];
        }
    }        
    exportModule(lib);

重要提示:

self可能是一个糟糕的变量名称。在实践中,self通常用于存储函数的this(这是必需的this因为在新函数作用域中被自动覆盖)。变量名称self纯粹是一种约定,但打破约定可能会让其他开发人员感到困惑。

更好的变量名称可能是 _exports

最后,您可能不应该首先将变量命名为moduleexports

它只是有人将module.exports的快捷方式保存到局部变量中,以便可以引用self.something而不是module.exports.something。 它也可以是:

var myModule = module.exports;

名称self在语言中没有特殊含义 - 只是一个变量名称 - 尽管它经常用作闭包中this的保存值(这不是这里使用它的目的)。

通常不需要这个额外的快捷方式exports因为它已经是module.exports的预定义快捷方式,因此使用名为 self 的变量必须只是个人首选项编码风格,或者被没有意识到exports已经是预定义快捷方式的人使用。