如何让一个字符串执行?

 虽然eval()函数有这个功能但是我们还是避而远之,能不用尽量不要用。eval的执行环境比较混乱,它会查找当前执行的上下文环境从而导致混乱。

公司专注于为企业提供网站设计制作、成都网站设计、微信公众号开发、商城网站定制开发,成都小程序开发,软件按需网站开发等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,成都创新互联公司更提供一系列网站制作和网站推广的服务。

 
 
 
  1. let c = 1;
  2. let d =eval(`module.exports = function(a,b){
  3.      return a+b+c
  4. }`)
  5. console.log(d(1,2))  //4  会把c也输出

Function
取代eval()方法的是new Function 即window.Function,不受上下文作用域的影响

 
 
 
  1. let z = 3;
  2. let a = 'var a=1;return x+y+z';
  3. //最后一个参数是字符串  前面的参数是函数的形参
  4. let fn = new Function("x","y","z",a);
  5. console.log(fn.toString());  //function anonymous(x,y,z) {var a=1;return x+y+z}
  6. // console.log(fn(1,2)); //NaN
  7. //console.log(fn(1,2,3)); //6

vm[2]
vm.runInThisContext ()在当前全局上下文中运行代码并返回结果。运行代码不能访问本地范围,但是可以访问当前的全局对象。

 
 
 
  1. const vm = require('vm');
  2. const vmResult = vm.runInThisContext('localVar = "vm";');
  3. console.log(vmResult)  //vm
  4. console.log(localVar)  //vm

 
 
 
  1. const vm = require('vm');
  2. let localVar = 'initial value';
  3. const vmResult = vm.runInThisContext('localVar = "vm";');
  4. console.log(`vmResult: '${vmResult}', localVar: '${localVar}'`);
  5. // Prints: vmResult: 'vm', localVar: 'initial value'
  6. const evalResult = eval('localVar = "eval";');
  7. console.log(`evalResult: '${evalResult}', localVar: '${localVar}'`);
  8. // Prints: evalResult: 'eval', localVar: 'eval'

因为vm.runInThisContext ()不能访问本地作用域,所以 localVar 没有更改。相比之下,eval ()确实可以访问本地范围,因此会更改值 localVar。

本文名称:如何让一个字符串执行?
链接URL:http://www.mswzjz.cn/qtweb/news13/525513.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能