首页 相关文章 对JavaScript的eval()中使用函数的进一步讨论

对JavaScript的eval()中使用函数的进一步讨论

  《JavaScript语言精髓与编程实践》的读者I22141提出了一问题:为什么下面这段代码在JScript和SpiderMonkey中表现不一样:

--------
var func = eval("(function(){})");
alert(typeof func);
--------

  更进一步的问题是,书中对匿名和具名函数在JScript与SpiderMonkey中的表现解释得不够清楚。好的,这篇文章就这个问题深入讨论,不单涉及书中的内容,也更深入地讲述一下JS的解释与执行过程——其实所有的内容在书中都有涉及,但过于分散,不便于专门地来分析一个具体问题。

  首先,应该明确表达式与语句。对于JS来说,eval()总是试图执行一个语句,因此它必须先将执行文本理解为语句。如下:

--------
eval("1")
--------

  在JS看来,由于eval()必须执行语句,因此"1"不再是直接量表达式,而是直接量表达式语句,也就是相当于“1;”。这些内容,在“5.2.2 动态执行过程中的语句、表达式与值”中有详细解释。

  所以,eval()的返回值,其实...[ 查看全文 ]

2016-02-19 标签:

对JavaScript的eval()中使用函数的进一步讨论的相关文章

手机页面
收藏网站 回到头部