在Node.js模块中解析JavaScript代码

// ===============================================================================
// Auth
// ===============================================================================
const admin = require('firebase-admin');     //what happens if i move this line
admin.initializeApp();                       //and this line

module.exports = function(app) {

//to this line
//and this line?

  app.post('/login',function(req,res) {
    const token = req.body.token;

    console.log('token sent: ' + token);

    admin
      .auth()
      .verifyIdToken(token)
      .then(result => {
        console.log('verifyIdToken result: ' + result);
      });

    res.send({ valid: 'havent programmed this yet' });
  });
};

假设我正在使用上面的代码。我很好奇为什么放置第一行代码后它仍然可以运行:

const admin = require('firebase-admin');
admin.initializeApp(); 

是从module.export到其内部的匿名函数的外部吗?我感到很困惑!此函数是否在其模块外部查找以获取此范围,并且从module.exports而不是外部声明此const const有什么区别?

a408377654 回答:在Node.js模块中解析JavaScript代码

要了解正在发生的事情,您需要了解Javascript闭包和模块模式。

当这两行在module.exports之外时,它们是全局范围的一部分,因此visible属于您的模块。这是因为在任何函数,块或模块范围之外定义的变量在文件内部都具有global scope

将其移动到模块内部时,它们将成为功能/模块范围的一部分,因此再次成为visible

您可以阅读这篇古老而相关的文章,以更好地理解。 https://www.joezimjs.com/javascript/javascript-closures-and-the-module-pattern/

本文链接:https://www.f2er.com/3019937.html

大家都在问