最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJs中的VM模塊詳解

 更新時間:2015年05月06日 10:21:50   投稿:junjie  
這篇文章主要介紹了NodeJs中的VM模塊詳解,本文講解了什么是VM? 、VM模塊的runInThisContext、runInThisContext方法等內(nèi)容,需要的朋友可以參考下

什么是VM?

VM模塊是NodeJS里面的核心模塊,支撐了require方法和NodeJS的運行機制,我們有些時候可能也要用到VM模板來做一些特殊的事情。

通過VM,JS可以被編譯后立即執(zhí)行或者編譯保存下來稍后執(zhí)行(JavaScript code can be compiled and run immediately or compiled, saved, and run later.)
VM模塊包含了三個常用的方法,用于創(chuàng)建獨立運行的沙箱體制,如下三個方法
vm.runInThisContext(code, filename);

此方法用于創(chuàng)建一個獨立的沙箱運行空間,code內(nèi)的代碼可以訪問外部的global對象,但是不能訪問其他變量

而且code內(nèi)部global與外部共享

復制代碼 代碼如下:

var vm = require("vm");
 
var p = 5;
global.p = 11;
 
vm.runInThisContext("console.log('ok', p)");// 顯示global下的11
vm.runInThisContext("console.log(global)"); // 顯示global
 
console.log(p);// 顯示5
vm.runInContext(code, sandBox);

此方法用于創(chuàng)建一個獨立的沙箱運行空間,sandBox將做為global的變量傳入code內(nèi),但不存在global變量

sandBox要求是vm.createContext()方法創(chuàng)建的sandBox

復制代碼 代碼如下:

var vm = require("vm");
var util = require("util");
 
var window = {
    p: 2,
    vm: vm,
    console: console,
    require: require
};
 
var p = 5;
 
global.p = 11;
 
vm.createContext(window);
vm.runInContext('p = 3;console.log(typeof global);', window); // global是undefined
 
console.log(window.p);// 被改變?yōu)?
 
console.log(util.inspect(window));
vm.runInNewContext(code, sandbox, opt);

這個方法應該和runInContext一樣,但是少了創(chuàng)建sandBox的步驟

比較

更為復雜的情形
如果runInContext里面執(zhí)行runInThisContext會是怎么樣,runInThisContext訪問到的global對象是誰的?

如下代碼將會怎么執(zhí)行?

復制代碼 代碼如下:

var vm = require("vm");
var util = require("util");
 
var window = {
    p: 2,
    vm: vm,
    console: console,
    require: require
};
 
window.global = window;
 
var p = 5;
 
global.p = 11;
 
vm.runInNewContext('p = 3;console.log(typeof global);require(\'vm\').runInThisContext("console.log(p)");', window);

runInThisContext里面的代碼可以訪問外部的global對象,但外面實際上不存在global對象(雖然有,但本質(zhì)不是global對象),只要記住一點,runInThisContext只能訪問最頂部的global對象就OK了

執(zhí)行結果如下

復制代碼 代碼如下:

object (global存在)
11 (頂部global的p)

相關文章

  • NodeJS學習筆記之Module的簡介

    NodeJS學習筆記之Module的簡介

    模塊是Node.js 應用程序的基本組成部分,文件和模塊是一一對應的。換言之,一個 Node.js 文件就是一個模塊,這個文件可能是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。
    2017-03-03
  • ExpressJS入門實例

    ExpressJS入門實例

    這篇文章主要介紹了ExpressJS入門實例,本文講解了創(chuàng)建項目、進入目錄、安裝項目依賴的包、創(chuàng)建應用程序、運行程序等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Node.js自定義實現(xiàn)文件路由功能

    Node.js自定義實現(xiàn)文件路由功能

    這篇文章主要介紹了Node.js自定義實現(xiàn)文件路由功能的相關資料,需要的朋友可以參考下
    2017-09-09
  • koa+jwt實現(xiàn)token驗證與刷新功能

    koa+jwt實現(xiàn)token驗證與刷新功能

    這篇文章主要介紹了koa+jwt實現(xiàn)token驗證與刷新功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 基于node搭建服務器,寫接口,調(diào)接口,跨域的實例

    基于node搭建服務器,寫接口,調(diào)接口,跨域的實例

    今天小編就為大家分享一篇基于node搭建服務器,寫接口,調(diào)接口,跨域的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • CentOS 安裝NodeJS V8.0.0的方法

    CentOS 安裝NodeJS V8.0.0的方法

    這篇文章主要介紹了CentOS 安裝NodeJS V8.0.0的方法,需要的朋友可以參考下
    2017-06-06
  • Node.js console控制臺簡單用法分析

    Node.js console控制臺簡單用法分析

    這篇文章主要介紹了Node.js console控制臺簡單用法,結合實例形式分析了nodejs console控制臺功能、常見函數(shù)與簡單使用技巧,需要的朋友可以參考下
    2019-01-01
  • 詳解使用抽象語法樹AST實現(xiàn)一個AOP切面邏輯

    詳解使用抽象語法樹AST實現(xiàn)一個AOP切面邏輯

    這篇文章主要為大家介紹了使用抽象語法樹AST實現(xiàn)一個AOP切面邏輯的簡單方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • NodeJS設計模式總結【單例模式,適配器模式,裝飾模式,觀察者模式】

    NodeJS設計模式總結【單例模式,適配器模式,裝飾模式,觀察者模式】

    這篇文章主要介紹了NodeJS設計模式,結合實例形式總結分析了nodejs單例模式,適配器模式,裝飾模式,觀察者模式的概念、原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • Node.js Continuation Passing Style( CPS與回調(diào))

    Node.js Continuation Passing Style( CPS與

    這篇文章主要介紹了Node.js Continuation Passing Style,將回調(diào)函數(shù)作為參數(shù)傳遞,這種書寫方式通常被稱為Continuation Passing Style(CPS),它的本質(zhì)仍然是一個高階函數(shù),CPS最初是各大語言中對排序算法的實現(xiàn)
    2022-06-06

最新評論

云安县| 綦江县| 贵定县| 凤城市| 华容县| 霍城县| 淮北市| 建德市| 潜江市| 宜城市| 香港 | 手游| 江华| 大名县| 报价| 思南县| 措美县| 彭州市| 余干县| 鸡西市| 隆尧县| 保定市| 陆良县| 虞城县| 宁武县| 沾益县| 新干县| 榆中县| 海宁市| 银川市| 连江县| 靖远县| 峨眉山市| 临武县| 镇宁| 孟津县| 尉犁县| 江口县| 孟村| 曲阜市| 九寨沟县|