如何让一个字符串执行?

开发
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码

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

[[342750]]

  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.  
  3. const vmResult = vm.runInThisContext('localVar = "vm";'); 
  4. console.log(vmResult)  //vm 
  5. console.log(localVar)  //vm 

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

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

 

责任编辑:姜华 来源: 小丑的小屋
相关推荐

2023-04-25 15:46:51

Python字符串

2022-11-24 08:01:57

bash脚本字符串

2019-12-16 09:26:05

Java设计操作系统

2022-12-08 15:55:52

JavaScript字符串

2019-01-08 09:23:16

Java字符串编码

2010-10-09 13:41:42

MySQL字符串

2021-07-26 10:58:07

Chromebook谷歌更新

2020-09-07 07:35:03

Grep命令字符串

2023-06-01 07:49:51

2020-11-03 18:36:37

面试字符串算法

2009-11-16 17:59:13

PHP数组转字符串

2021-12-03 08:50:25

LeetCode正则表达式算法

2020-06-28 14:18:23

Python代码开发

2011-05-25 09:58:46

C#

2023-05-05 08:41:16

SQL字符函数

2009-08-12 11:24:25

C# String对象

2010-09-26 13:51:48

SQL游标

2009-12-15 15:35:56

Ruby symbol

2022-06-28 11:30:38

广电5G套餐专网

2020-08-12 22:03:17

JavaScript开发技术
点赞
收藏

51CTO技术栈公众号