当前位置: 首页 > news >正文

dw做的网站怎么被别人打开/seo代码优化包括哪些

dw做的网站怎么被别人打开,seo代码优化包括哪些,用网站做的人工智能,潍坊外贸网站制作CommonJS 在node.js中,使用 CommonJS 作为其模块化规范。 根据 CommonJS 模块化规范,一个单独的JS文件就是一个模块,每个模块是一个单独的作用域,在模块内部定义的变量,无法在其他模块中所读取。若想要在模块间进行通…

CommonJS

node.js中,使用 CommonJS 作为其模块化规范。

根据 CommonJS 模块化规范,一个单独的JS文件就是一个模块,每个模块是一个单独的作用域,在模块内部定义的变量,无法在其他模块中所读取。若想要在模块间进行通信,需使用模块的导出与导入语法:

  • 模块通过变量exports向外暴露API,注意,exports只能是一个对象,该对象的属性即为向外暴露的API
  • 在另一个模块中,通过全局函数require引入其他模块导出的exports对象。

基本语法

例如,a.js文件中导出对象exports,其中包含了nameadd属性,分别是文件中定义的常量。

const name = 'Jack';const add = (a, b) => a + b;module.exports = {name,add
};

在文件b.js中,通过全局函数require引入该导出的对象exports

const api = require('./a');console.log(api);
// { name: 'Jack', add: [Function: add] }

注意,api这个可以随意取的。通常,也可以通过解构赋值的形式,按需进行导入:

const { name } = require('./a');console.log(name);
// Jack

多次导入

接上述例子,若在b.js文件中,多次导入a模块,会怎么样呢?两次导入的是同一个对象吗?

const api1 = require('./a');
const api2 = require('./a');console.log(api1 === api2);
// true

如上述代码所示,b.js中两次引入a模块,并判断两个导入的变量是否为相等。结果输出true,说明若多次引用,实际上导入的模块是同一个对象。

实际上,在第一次导入中,会执行要导入的文件,并在内存中缓存一个对象,其中exports就是要导入的对象。再次导入相同模块时,并不会再执行了,会直接从内存中取这个exports对象。

{id: '...', // 模块名exports: { ... }, // 模块输出的接口loaded: true, // 模块的脚本是否执行完毕...
}

是否支持更改

导入模块,实际上就是执行一遍要导入的模块,然后将其输出的exports对象,作为require函数的返回值。实际上就是普通的赋值语句,若使用varlet进行声明,当然支持更改。

let api1 = require('./a');api1 = {};console.log(api1);
// {}

循环引用

若出现某模块被循环加载,只输出已经执行的部分,未执行的不会输出。

若在a.js中引入b.js,在b.js中引入a.js,形成循环引用,是否会报错呢?若不报错,运行的结果是怎么样的?

还是以代码举例比较清晰。如下代码所示,a模块引入b模块,b模块引入a模块。

// a.js
const b = require('./b');console.log('b', b);const name = 'Jack';
const age = 18;module.exports = {name,age
};
// b.js
const a = require('./a');console.log('a', a);const id = '001';module.exports = {id
};

运行node a.js,控制台输出如下:

a {}
b { id: '001' }

没有报错,正常运行。这是因为前面提到的原因:若出现某模块被循环加载,只输出已经执行的部分,未执行的不会输出。

简单分析一下:

  • 运行node a.js。首先进入到a模块,a模块一开始就导入b模块,那么就会先执行一遍b.js,然后返回b.js导出的exports对象给a模块中的常量b
  • 执行b.js。一开始又导入了a.js。但是a.js并未执行完毕,只会返回已执行的部分。由于a.js导出的是nameage,此时a.js只执行到第1行,所以实际上此时导入a.js,只会返回空对象,因为nameage还未执行到。所以require('./a')返回空对象,赋值给常量a,故打印出空对象
  • 接着继续执行b.js,将剩下的代码执行完毕,正常导出了exports对象,其中包含了id属性。
  • 执行完毕后,又回到了a.js的第一行中,require('./b')返回b导出的exports对象,包含了id属性。所以,下面能正常打印出{ id: '001' }
  • 接着在a.js中,将剩余的代码执行完毕。

思考题

a.jsb.jsc.js三个文件,执行node a.js,控制台将会输出什么?

// a.js
const b = require('./b');console.log(exports.x);exports.x = 'x';require('./c');
// b.jsconst a = require('./a');console.log(a);a.x = 'y';
// c.js
const a = require('./a');console.log(a.x);

答案:

{}
y
x

以上为本人学习所得,若有不妥,欢迎批评指出!

http://www.lbrq.cn/news/1099243.html

相关文章:

  • 网站服务器维护方案/网上网络推广
  • 昆明做网站哪家好/企业排名优化公司
  • 网站快速设计/seo网站推广批发
  • 闲置服务器做网站挣钱/网站建设方案外包
  • 承德网站制作公司/小红书推广方式有哪些
  • 永康网站建设/舆情分析
  • 个人未授权做的网站/百度站长平台官网登录入口
  • 忻州推广型网站开发/近期出现的病毒叫什么
  • dedecms 视频网站模板/semi final
  • 中小型网站建设流程/济宁百度竞价推广
  • 做网站的app/小吃培训机构排名前十
  • 网站开发 周期/搜狗搜索推广
  • 网站建设作业多少钱/百度网站首页网址
  • 营销网站的概念/百度智能云建站
  • 微信公众号影视网站怎么做/磁力蜘蛛
  • 网站注册域名位置/黑帽seo是什么意思
  • 上海快速建站/今日新闻 最新消息 大事
  • jsp做新闻网站/免费seo诊断
  • 网站建设目录结构doc/网络推广方案有哪些
  • 网页制作怎么插视频/广告优化师适合女生吗
  • 压铸东莞网站建设/东莞网站建设seo
  • 吉林省科瑞建设项目管理有限公司网站/对网站提出的优化建议
  • 网站源码网/国内免费域名注册网站
  • 做网站后端需要掌握什么技术/百度搜索排名优化哪家好
  • 厦门百度网站建设/自己建网站要多少钱
  • 免费ppt资源网站/南宁seo排名外包
  • 安徽论坛网站建设/广告多的网站
  • 政府网站建设工作存在的不足/百度网页版链接
  • 使用别人网站代码做自己的网站/搜索热门关键词
  • 网站排名恢复/网站技术解决方案
  • 用 STM32 的 SYSTICK 定时器与端口复用重映射玩转嵌入式开发
  • Elasticsearch 是 NVIDIA Enterprise AI Factory 验证设计中推荐的向量数据库
  • 智慧场景:定制开发开源AI智能名片S2B2C商城小程序赋能零售新体验
  • 企业级安全威胁检测与响应(EDR/XDR)架构设计
  • 枪战验证系统:通过战斗证明你是人类
  • 【unitrix】 6.10 类型转换(from.rs)