解析Node.js模块中的JavaScript代码
假设我正在使用上述代码。我很好奇,如果我放置第一行代码,为什么它仍然运行:解析Node.js模块中的JavaScript代码,javascript,node.js,express,node-modules,Javascript,Node.js,Express,Node Modules,假设我正在使用上述代码。我很好奇,如果我放置第一行代码,为什么它仍然运行: // =============================================================================== // Auth // =============================================================================== const admin = require('firebase-admin'
// ===============================================================================
// 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' });
});
};
从module.exports导出的匿名函数的外部到内部?我真糊涂!此函数是否在其模块之外寻找以获取此作用域,以及从module.exports内而不是从module.exports外声明此admin const有什么区别?要了解发生了什么,您需要了解Javascript闭包和模块模式 当这两行在module.exports之外时,它们是全局范围的一部分,因此对您的模块可见。这是因为在任何函数、块或模块作用域之外定义的变量在文件中具有
全局作用域
当您将其移动到模块内部时,它们将成为功能/模块范围的一部分,因此再次可见
您可以阅读这篇古老但相关的文章,以便更好地理解。
要了解发生了什么,您需要了解Javascript闭包和模块模式 当这两行在module.exports之外时,它们是全局范围的一部分,因此对您的模块可见。这是因为在任何函数、块或模块作用域之外定义的变量在文件中具有
全局作用域
当您将其移动到模块内部时,它们将成为功能/模块范围的一部分,因此再次可见
您可以阅读这篇古老但相关的文章,以便更好地理解。
在这里使用“全局范围”一词时,我会非常小心。更好的术语是
模块范围
或导入范围
imo。全局范围指的是窗口
和过程
对象之类的内容。我在这里会小心使用“全局范围”一词。更好的术语是模块范围
或导入范围
imo。例如,全局范围将指窗口
和过程
对象之类的内容。
const admin = require('firebase-admin');
admin.initializeApp();