当问这个问题时,ECMAscript5(ES5)盛行。在ES5的严格模式下,函数声明不能嵌套在一个
if块中,如问题所示。在非严格模式下,结果是不可预测的。不同的浏览器和引擎针对如何处理块内的函数声明实现了自己的规则。
许多浏览器都支持ECMAscript2015(ES2015),以至于现在在block中允许使用函数声明。在ES2015环境中,块内的函数声明将作用于该块内。问题中的代码将导致未定义的函数错误,因为该函数
a仅在
if语句范围内声明,因此不存在于全局范围内。

当问这个问题时,ECMAscript5(ES5)盛行。在ES5的严格模式下,函数声明不能嵌套在一个
if块中,如问题所示。在非严格模式下,结果是不可预测的。不同的浏览器和引擎针对如何处理块内的函数声明实现了自己的规则。
许多浏览器都支持ECMAscript2015(ES2015),以至于现在在block中允许使用函数声明。在ES2015环境中,块内的函数声明将作用于该块内。问题中的代码将导致未定义的函数错误,因为该函数
a仅在
if语句范围内声明,因此不存在于全局范围内。