我从 TS 收到此错误:
很清楚为什么会发生错误:
function outer(){
if (true) {
function inner(){ // nested function declaration
}
}
}
但我的问题是 - 为什么 TS 抱怨这一点 - 是否有一些技术原因我应该在转换为 ES5 时避免嵌套函数声明?
函数表达式会是更好的选择吗,为什么?
我从 TS 收到此错误:
很清楚为什么会发生错误:
function outer(){
if (true) {
function inner(){ // nested function declaration
}
}
}
但我的问题是 - 为什么 TS 抱怨这一点 - 是否有一些技术原因我应该在转换为 ES5 时避免嵌套函数声明?
函数表达式会是更好的选择吗,为什么?
函数表达式会是更好的选择吗
是的。以下是要走的路:
function outer() {
if (true) {
const inner = function() { // OK
}
}
}
为什么?
它被禁止的原因包含在原始 JavaScript 规范中。简短版本:实现之间的行为不一致。
注意 众所周知,ECMAScript 的几个广泛使用的实现支持将 FunctionDeclaration 用作语句。然而,在应用于此类 FunctionDeclarations 的语义中,实现之间存在显着且不可调和的变化。由于这些不可调和的差异,将 FunctionDeclaration 用作 Statement 会导致代码在实现之间不能可靠地移植。建议 ECMAScript 实现要么禁止 FunctionDeclaration 的这种用法,要么在遇到这种用法时发出警告。ECMAScript 的未来版本可能会定义替代的可移植方式,用于在 Statement 上下文中声明函数。
因此,当严格模式出现(ES5)时,它就被禁止了。