如何在javascript中定义函数内部的函数?

如何在javascript中定义函数内部的函数?,javascript,Javascript,我想在函数中声明一个函数。我是这样做的: var expr = "'use strict'; console.log('a')"; var f = Function('"use strict";var t = Function('+expr+');'); f(); 我得到以下错误:未捕获的语法错误:意外的标记“;” 这里是链接到 我需要能够创建一个函数,其中包含一个函数,这里不接受嵌套函数或eval。 我注意到,expr变量中的任何内容都被错误地处理。我是说不管我放在那里的代码是什么。所以我甚

我想在函数中声明一个函数。我是这样做的:

var expr = "'use strict';
console.log('a')";
var f = Function('"use strict";var t = Function('+expr+');');
f();
我得到以下错误:未捕获的语法错误:意外的标记“;” 这里是链接到 我需要能够创建一个函数,其中包含一个函数,这里不接受嵌套函数或eval。 我注意到,expr变量中的任何内容都被错误地处理。我是说不管我放在那里的代码是什么。所以我甚至不能在里面放一个变量。顺便说一句,如果我只说一句话,比如

console.log('a')

它工作正常,并在控制台中生成预期的a

我需要使用函数的原因是我想检查严格模式的工作方式。根据ecmascript规范(10.1.1.Strict Mode Code),如果代码以“use Strict”开头或在Strict Mode内,则代码处于Strict Mode。所以我想检查函数中的函数在严格的代码中的行为

正如我所发现的,函数内部的函数并没有相同的严格模式。这是菜单 举个例子。变量未被声明,并且它很好。尝试添加“use strict”,您会看到一个错误。
要了解更多详细信息,请查看此

中的最后一点。除了确实应该避免此构造之外(它很慢,如果您不确定字符串的来源可能会很危险,当然处理引号很痛苦),您有三个问题:

  • 错误的字符串文字
  • 您不调用内部函数
  • 内部函数体周围缺少引号
这里有一个“固定”版本:

var expr = "'use strict';\
console.log('a')";
var f = Function('"use strict";var t = Function("'+expr+'");t();');
f();

除了确实应该避免这种构造(它很慢,如果您不确定字符串的来源可能会很危险,当然处理引号也很痛苦),您还有三个问题:

  • 错误的字符串文字
  • 您不调用内部函数
  • 内部函数体周围缺少引号
这里有一个“固定”版本:

var expr = "'use strict';\
console.log('a')";
var f = Function('"use strict";var t = Function("'+expr+'");t();');
f();

除了确实应该避免这种构造(它很慢,如果您不确定字符串的来源可能会很危险,当然处理引号也很痛苦),您还有三个问题:

  • 错误的字符串文字
  • 您不调用内部函数
  • 内部函数体周围缺少引号
这里有一个“固定”版本:

var expr = "'use strict';\
console.log('a')";
var f = Function('"use strict";var t = Function("'+expr+'");t();');
f();

除了确实应该避免这种构造(它很慢,如果您不确定字符串的来源可能会很危险,当然处理引号也很痛苦),您还有三个问题:

  • 错误的字符串文字
  • 您不调用内部函数
  • 内部函数体周围缺少引号
这里有一个“固定”版本:

var expr = "'use strict';\
console.log('a')";
var f = Function('"use strict";var t = Function("'+expr+'");t();');
f();


但你为什么要规避代码?这是一个糟糕的做法。@DhavalMarthak一点也不:他正在使用函数“构造函数”。“我想在函数中声明一个函数”-为什么?你想实现什么?函数构造函数也是有效的,用另一个名字
eval
。禁止
eval
的任何理由也适用于
函数
构造函数。更新了问题以说明我为什么需要它。但为什么要评估代码?这是一个糟糕的做法。@DhavalMarthak一点也不:他正在使用函数“构造函数”。“我想在函数中声明一个函数”-为什么?你想实现什么?函数构造函数也是有效的,用另一个名字
eval
。禁止
eval
的任何理由也适用于
函数
构造函数。更新了问题以说明我为什么需要它。但为什么要评估代码?这是一个糟糕的做法。@DhavalMarthak一点也不:他正在使用函数“构造函数”。“我想在函数中声明一个函数”-为什么?你想实现什么?函数构造函数也是有效的,用另一个名字
eval
。禁止
eval
的任何理由也适用于
函数
构造函数。更新了问题以说明我为什么需要它。但为什么要评估代码?这是一个糟糕的做法。@DhavalMarthak一点也不:他正在使用函数“构造函数”。“我想在函数中声明一个函数”-为什么?你想实现什么?函数构造函数也是有效的,用另一个名字
eval
。禁止
eval
的任何原因也适用于
函数
构造函数。更新问题以说明我为什么需要它。谢谢,现在就尝试一下!谢谢,现在试一试!谢谢,现在试一试!谢谢,现在试一试!