我从 TS 收到此错误:
发生错误的原因非常清楚:
function outer(){
if (true) {
function inner(){ // nested function declaration
}
}
}
但我的问题是 - 为什么 TS 会抱怨这一点 - 在转译为 ES5 时是否有一些技术原因我应该避免嵌套函数声明?
函数表达式是更好的选择吗?为什么?
函数表达式是更好的选择吗
是的。以下是要走的路:
function outer() {
if (true) {
const inner = function() { // OK
}
}
}
Why?
- ES 模块默认处于严格模式。
- 严格模式不允许在块中声明函数
被禁止的原因包含在原始 JavaScript 规范 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf。简洁版本:实现之间的行为不一致.
注意 已知几种广泛使用的 ECMAScript 实现支持使用 FunctionDeclaration 作为语句。然而,应用于此类 FunctionDeclarations 的语义实现之间存在显着且不可调和的差异。由于这些不可调和的差异,使用 FunctionDeclaration 作为语句会导致代码在实现之间无法可靠地移植。建议 ECMAScript 实现禁止使用 FunctionDeclaration,或者在遇到这种用法时发出警告。 ECMAScript 的未来版本可能会定义替代的可移植方法,用于在语句上下文中声明函数。
因此,当严格模式出现(ES5)时,它就被禁止了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)