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();
由于某些原因,我需要使用 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();