2013-03-01 105 views
5

嗨,我是Javascript新手,我正在阅读Oreilly的Javascript权威指南。在声明语句段,它说:函数声明是否不能出现在条件语句中?

enter image description here

我做了一个简单的测试:

var a = 1; 
while(a < 5){ 
    a++; 
    function double(a){return a * 2 }; 
    console.log(double(a)); 
}  

看来Node.js的不给我任何错误和运行预期。对此有何评论?

+2

以严格模式运行它,你会得到你的错误。这是无效的语法*(除非Mozilla的JS实现允许类似的语法)*,但历史上已被实现许可。 – 2013-03-02 00:04:02

回答

-1

这是不正确的。但是,你应该记住,他们可能不像你所期望的那样行事。

举例来说,这将工作:

if(false) { 
    function double(a) {return a*2;}; 
} 
else { 
    console.log(double(4)); 
} 

即使你可能会认为这是从来没有定义功能,由于是一个if永远达不到里面的功能其实是在提升到的顶部当前的“块”(无论是包含功能还是整个<script>标签或文件),因此可以在任何地方访问。

不应该function定义在if块内,但没有理由不能。

+1

有很多理由你不应该 - 1.规范说不要,2.在某些浏览器上,它不起作用! – Alnitak 2013-03-02 00:21:53

+0

@Alnitak我特别说你不应该。但根据吊装规格,它与'var'完全相同。 – 2013-03-02 00:22:34

+0

根据规格无效,因此说明书中关于“提升”*(规范中未使用的术语)*描述的内容不适用。这些实现可能允许它,并且可能会将它的提升视为相同,但它仍然无效。 – 2013-03-02 00:42:06

相关问题