我想在Function中声明一个Function。我这样做:
var expr = "'use strict';
console.log('a')";
var f = Function('"use strict";var t = Function('+expr+');');
f();
我收到以下错误:Uncaught SyntaxError:Unexpected token';' 下面是jsbin的链接 我需要能够在Function中创建一个Function函数,而不是嵌套函数或eval。 我注意到,expr变量中的任何内容都被错误地处理了。我的意思是我放在那里的任何代码。所以我不能在内部放置变量。顺便说一句,如果我选择单一陈述,比如
console.log('a');
它工作正常并在控制台中生成预期的a。
我需要使用Function的原因是我想检查严格模式的工作原理。根据ecmascript规范(10.1.1。严格模式代码),如果代码以“use strict”的序言开头或在严格模式内,则代码处于严格模式。所以我想检查函数内部的函数如何在严格的代码中表现。
正如我发现函数内部函数没有相同的严格模式。继承人jsbin 举个例子。变量未声明且很好。尝试添加“use strict”,你会看到一个错误。 有关详细信息,请查看此list
中的最后一点答案 0 :(得分:3)
除此之外,应该真正避免这种结构(它很慢,如果你不确定字符串的来源可能会很危险,当然处理引号很痛苦),你有三个问题:
这是"固定"版本:
var expr = "'use strict';\
console.log('a')";
var f = Function('"use strict";var t = Function("'+expr+'");t();');
f();