javascript - 将字符串更改为 javascript 中的函数(不是 eval)

标签 javascript string function

var foo = "function (){ alert('meee'); }";
foo();

我已经尝试了上面的方法,但它不起作用有没有其他方法可以在不使用 eval 的情况下执行该函数?

谢谢

最佳答案

您想使用 Function正如安德斯所说,直接构造函数。所有参数都是字符串。最后一个参数是函数的主体,任何前导参数都是函数采用的参数的名称。

借用安德斯的例子,

var multiply = new Function("x", "y", "return x * y");

会像写作

var multiply = function (x,y) {
  return x * y
}

在你的例子中,你有 "function (){ alert('meee'); }"并且您想将其保存为 var foo 的函数.

var fn = "function (){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"

Function之间的区别和 evaleval在私有(private)范围内运行,而 Function在全局范围内运行。

var x="haha", y="hehe";

function test () {
  var x=15, y=34;
  eval("alert('eval: ' + x + ', ' + y)");
  new Function("alert('Func: ' + x + ', ' + y)")();
} 

test();

// eval: 15, 34
// Func: haha, hehe

不要尝试在控制台中运行它,你会得到一个欺骗性的结果(控制台使用 eval )。将其写入 <script>标记并将其加载到浏览器中将给出真实结果。

关于javascript - 将字符串更改为 javascript 中的函数(不是 eval),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3338397/

相关文章:

java - 链表 - insert before 方法会导致链表永远持续下去

python - 将字符串转换为浮点型(在字符串内进行计算)

string - 组件 8086 TASM - 0Ah 21h 记住最后一个条目

javascript - 解析 JavaScript 字符串的最佳实践

javascript - 使用 Three.js 在立方体上渲染六个视频纹理

django - 与装饰器和正常功能相同的条件?

C++ 模板隐式使用

javascript - AngularJS 中的 $scope 是什么?

javascript - Twitter Bootstrap 的旋转木马淡入淡出过渡

javascript - 如何使用 D3.js 或 C3.js 自定义 Gauge 指针?