沙箱1111111
参考文章https://blog.csdn.net/qq_61839115/article/details/132120985?fromshare=blogdetail&sharetype=blogdetail&sharerId=132120985&sharerefer=PC&sharesource=2401_88743143&sharefrom=from_linkhttps://blog.csdn.net/qq_61839115/article/details/132120985?fromshare=blogdetail&sharetype=blogdetail&sharerId=132120985&sharerefer=PC&sharesource=2401_88743143&sharefrom=from_link
// xxx.js
const vm = require('vm')
var local_var = 'leekos'
global.global_var = 'xxx global~'
var vm_var = vm.runInThisContext('global_var="vm_var";local_var="Tranquility";')
console.log("vm_var: "+vm_var)
console.log("local_var: "+local_var)
console.log(global_var)/*
输出:
vm_var: Tranquility
local_var: leekos
vm_var
*/
这段代码我当时不太理解最后一个输出,搜了一下因为vm.runInThisContext返回最后一个表达式的值刚好是Tranquility,因此vm_var赋值为Tranquility
后面讲了vm.createContext()
+ vm.runInContext()这两个和前面的区别,
const vm = require('vm')
global.global_var = 1
const sandbox = {global_var: 2} //创建一个沙箱对象
vm.createContext(sandbox) //创建一个上下文对象
vm.runInContext('global_var*=2',sandbox)console.log(sandbox) // { global_var: 4 }
console.log(global_var) // 1
就这段代码来讲vm.createContext创建一个上下文对象,这里的sandbox是全局对象(在这个沙箱里不能访问globle),这个就类似于globle,后面在vmrunInContext里的globle_var是隔绝的(只是沙箱里的)所以sandbox的输出是globle_var:4而沙箱外的globle_var依旧是1