eval() 后无法访问函数

Not able access function after eval()

由于某些原因,我需要使用 eval() 并访问函数,即 foo。但是,我无法用打字稿制作它。

eval("function foo() { console.log(\"foo bar\") }");
// @ts-ignore
foo();

上面的代码会遇到错误,而不是在控制台日志中打印 "foo bar"。

VM42:4 Uncaught ReferenceError: foo is not defined

您可以尝试使用代码 here

但是,相同的代码在 javascript 中有效。

是否需要额外配置?

TypeScript 的隐含 "use strict"eval 施加了严格的限制,特别是它的 inability to create new symbols。您需要明确 return 并从 eval:

分配函数

"use strict"

const foo = eval("function foo() { console.log(\"foo bar\") }; foo;");

foo();

//可以在window/global中定义。可以在任何地方访问。

// 你可以hoist函数。作弊

let foo;
eval('function foo() { console.log("foo bar") };');

// @ts-ignore
foo();

// 对于浏览器添加 window,

eval("function foo() { console.log(\"foo bar\") }; window.foo = foo");

// @ts-ignore
foo();

// 对于 nodejs 添加 window,

eval("function foo() { console.log(\"foo bar\") }; global.foo = foo");

// @ts-ignore
foo();