手机版

NodeJS有很难的面试问题(有多少能正确回答)

时间:2021-08-19 来源:互联网 编辑:宝哥软件园 浏览:

1.节点模块机制

1.1请介绍节点中的模块是什么

在节点中,每个文件模块都是一个对象,定义如下:

函数模块(id,parent){ this . id=id;this . exports={ };this.parent=parentthis.filename=nullthis.loaded=falsethis . children=[];}模块。导出=模块;var模块=新模块(文件名,父模块);所有模块都是模块的实例。可以看到,当前的Module (module.js)也是Module的一个实例。

1.2请介绍require的模块加载机制

这个问题基本可以理解为面试官对Node模块机制的理解基本都是在面试中提到的

1.首先计算模块路径

2.如果模块在缓存中,取出缓存

3.加载模块

4.的输出模块的exports属性足够了

//require实际调用模块。_加载方法模块。_ load=function (request,parent,is main){//计算绝对路径varfilename=module。_ resolvefilename(请求,父级);//第一步:如果有缓存,取出缓存var cached module=module。_缓存[文件名];if(cached module){ return cached module . exports;//第二步:是否是内置模块if(nativemodule . exists(filename)){ return nativemodule . require(filename);}/* * * * * * * *模块。_cache[filename]=模块;/* * * * * HadException=false;}最后{ if (hadException) {删除模块。_缓存[文件名];} }//第五步:输出模块的exports属性返回module . exports;};然后继续就前一个问题提问

1.3加载模块时,为什么每个模块都有_ _ dirname和_ _ filename的属性?当使用new Module时,我们看到这两个属性在1.1部分中并不存在,那么这两个属性从何而来呢?

//在上面的第四步module.load(filename)//中,模块模块封装如下。//加载js模块相当于以下代码(加载节点模块的逻辑与json模块不同)(函数(exports,require,module,__filename,__dirname) {//模块源代码//如果模块代码如下:var math=require(' math ');exports.area=函数(半径){ return Math。PI *半径*半径} });也就是说,__filename,__dirname参数被传入每个模块,这些参数不是模块本身固有的,而是从外部传入的

1.4我们知道node导出模块有两种方式,一种是exports.xxx=xxx和Module.exports={}。有什么区别

Exports其实就是module.exports,其实1.3题的代码已经说明了问题。然后我引用了廖雪峰的解释,希望能说得更清楚一些。module.exports vs exports很多时候,您会看到在Node环境中,有两种方法。您可以在模块中输出变量:方法1:对于M,

版权声明:NodeJS有很难的面试问题(有多少能正确回答)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。