《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()的返回值,其实...[ 查看全文 ]