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

网站建设 新闻网站推广该怎么做

网站建设 新闻,网站推广该怎么做,朋友让你做网站如何拒绝,郑州网站优化培训机构一、沙箱逃逸概念 JavaScript和Nodejs之间有什么区别:JavaScript用在浏览器前端,后来将Chrome中的v8引擎单独拿出来为JavaScript单独开发了一个运行环境,因此JavaScript也可以作为一门后端语言,写在后端(服务端&#…

一、沙箱逃逸概念

  • JavaScript和Nodejs之间有什么区别:JavaScript用在浏览器前端,后来将Chrome中的v8引擎单独拿出来为JavaScript单独开发了一个运行环境,因此JavaScript也可以作为一门后端语言,写在后端(服务端)的JavaScript就叫叫做Nodejs。
  • 什么是沙箱(sandbox)当我们运行一些可能会产生危害的程序,我们不能直接在主机的真实环境上进行测试,所以可以通过单独开辟一个运行代码的环境,它与主机相互隔离,但使用主机的硬件资源,我们将有危害的代码在沙箱中运行只会对沙箱内部产生一些影响,而不会影响到主机上的功能,沙箱的工作机制主要是依靠重定向,将恶意代码的执行目标重定向到沙箱内部。
  • 沙箱(sandbox)和 虚拟机(VM)和 容器(Docker)之间的区别:sandbox和VM使用的都是虚拟化技术,但二者间使用的目的不一样。沙箱用来隔离有害程序,而虚拟机则实现了我们在一台电脑上使用多个操作系统的功能。Docker属于sandbox的一种,通过创造一个有边界的运行环境将程序放在里面,使程序被边界困住,从而使程序与程序,程序与主机之间相互隔离开。在实际防护时,使用Docker和sandbox嵌套的方式更多一点,安全性也更高。
  • 在Nodejs中,我们可以通过引入vm模块来创建一个“沙箱”,但其实这个vm模块的隔离功能并不完善,还有很多缺陷,因此Node后续升级了vm,也就是现在的vm2沙箱,vm2引用了vm模块的功能,并在其基础上做了一些优化。

二、Node将字符串执行为代码

方法一 eval

首先我在目录下创建一个age.txt

var age = 18

创建一个y1.js

const fs = require('fs')let content = fs.readFileSync('age.txt', 'utf-8')console.log(content)eval(content)console.log(age)

这里因为我没有配置Node.js,所以我将代码改为.txt在浏览器中为大家调试(结果一样)

fetch('age.txt').then(response => response.text()).then(content => {console.log(content);eval(content);console.log(age);}).catch(error => console.error('An error occurred:', error));

 结果:

 可以发现我们通过eval执行了一个字符串,但是这种执行方式如果在当前作用域下已经有了同名的age变量,这个程序就会报错。

 相同变量程序报错:

 在js中每一个模块都有自己独立的作用域,所以用eval执行字符串代码很容易出现上面的这个问题,我们再看另外一种方法。

方法二:new Function

上面的方法因为模块间的作用域被限制了使用,那么我们考虑一下如果能够自己创建一个作用域是不是就可以更加方便的执行代码呢?new Function的第一个参数是形参名称,第二个参数是函数体。

我们都知道函数内和函数外是两个作用域,不过当在函数中的作用域想要使用函数外的变量时,要通过形参来传递,当参数过多时这种方法就变的麻烦起来了。

从上面两个执行代码的例子可以看出来其实我们的思想就是如何创建一个能够通过传一个字符串就能执行代码,并且还与外部隔绝的作用域,这也就是vm模块的作用。

三、Nodejs作用域

说到作用域,我们就要说一下Node中的作用域是怎么分配的(在Node中一般把作用域叫上下文)。

在Web端(浏览器),发挥作用的一般是JavaScript,学过JavaScript的师傅应该都知道我们打开浏览器的窗口是JavaScript中最大的对象window,那么在服务端发挥作用的Node它的构造和JavaScript不太一样。

我们在写一个Node项目时往往要在一个文件里ruquire其他的js文件,这些文件我们都给它们叫做“包”。每一个包都有一个自己的上下文,包之间的作用域是互相隔离不互通的,也就是说就算我在y1.js中require了y2.js,那么我在y1.js中也无法直接调用y2.js中的变量和函数,举个例子。

在同一级目录下有y1.jsy2.js两个文件

y1.js:

var age = 20

y2.js:

const a = require("./y1")console.log(a.age)
运行y2.js发现报错:

那么我们想y2中引入并使用y1中的元素应该怎么办呢,Node给我们提供了一个将js文件中元素输出的接口exports ,把y1修改成下面这样:

y1.js:

var age = 20exports.age = age

我们再运行y2就可以拿到age的值了

图解:

 这个时候就有人会问左上角的global是什么?这里就要说到Nodejs中的全局对象了。

刚才我们提到在JavaScript中window是全局对象,浏览器其他所有的属性都挂载在window下,那么在服务端的Nodejs中和window类似的全局对象叫做global,Nodejs下其他的所有属性和包都挂载在这个global对象下。在global下挂载了一些全局变量,我们在访问这些全局变量时不需要用global.xxx的方式来访问,直接用xxx就可以调用这个变量。举个例子,console就是挂载在global下的一个全局变量,我们在用console.log输出时并不需要写成global.console.log,其他常见全局变量还有process(一会逃逸要用到)。

我们也可以手动声明一个全局变量,但全局变量在每个包中都是共享的,所以尽量不要声明全局变量,不然容易导致变量污染。用上面的代码举个例子:

http://www.hengruixuexiao.com/news/53187.html

相关文章:

  • 网站购物功能如何做海南百度竞价推广
  • 万网商标注册百度怎么做关键词优化
  • 佛山新网站建设价格怎样做网络推广效果好
  • 广告设计怎么学慈溪seo
  • 深圳中小企业网站制作每日重大军事新闻
  • 网站建设公司首页百度电话查询
  • 网络营销策略包括seo程序专员
  • 网站设计简单网页网站编辑seo
  • 政府门户网站改版方案临沂百度推广多少钱
  • 榆林哪里做网站百度关键词排名
  • 网站建设com交换友情链接的渠道有哪些
  • 哪个公司做网站北京网站定制公司
  • 金融网站做不了公安备案广州百度seo排名
  • 上海网站建设管理系统百度竞价专员
  • dedecms 网站地图 模板产品线上营销推广方案
  • 厦门建网站哪家好代理广告投放平台
  • 中小企业建设网站应注意北京网站优化对策
  • 合肥企业网站建设工深圳搜索引擎优化推广
  • 二元期权网站建设短期培训班学什么好
  • 宁波建设局网站seo运营培训
  • 微信开放平台 网站开发发稿推广
  • 网站开发与建设的原则cba赛程
  • 工作证明模板 通用版seo排名优化方式
  • 手机网站程序可以用.com作为域名吗2021近期时事新闻热点事件
  • 祥云网站建设seo综合查询平台
  • 网站源码怎么使用网站开发流程是什么
  • wordpress 连接丢失.保存已被禁用_直到您重新连接.西安网站优化推广方案
  • 专业制作藏品网站网站seo排名优化
  • 网站备案去哪备案培训网络营销机构
  • 无锡2019网站建设报价清单短视频精准获客