Ale*_*lls 1 javascript ecmascript-5 typescript typescript2.2
我从TS中收到此错误:
很清楚为什么会发生错误:
function outer(){
if (true) {
function inner(){ // nested function declaration
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我的问题是-为什么TS会抱怨这一点-在转换为ES5时应该避免一些技术原因,以避免嵌套函数声明吗?
函数表达式会是一个更好的选择,为什么?
函数表达式会是更好的选择吗
是。以下是方法:
function outer() {
if (true) {
const inner = function() { // OK
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么?
原始JavaScript规范中涵盖了不允许使用此功能的原因。简短版:行为在实现之间不一致。
注意已知有几种广泛使用的ECMAScript实现支持使用FunctionDeclaration作为语句。但是,在实现于此类FunctionDeclaration的语义上,实现之间存在重大且不可调和的变化。由于存在这些无法协调的差异,因此将FunctionDeclaration作为Statement的使用会导致代码无法在实现之间可靠地移植。建议ECMAScript实现禁止使用FunctionDeclaration,或者在遇到这种情况时发出警告。ECMAScript的未来版本可能会定义其他可移植方式,以在Statement上下文中声明函数。
因此,当严格模式(ES5)出现时,它就被禁止了。
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |