GlobalDeclarationInstantiation 附件语义中的早期错误
Early Error in annex semantics of GlobalDeclarationInstantiation
我找不到任何消息来源谈论规范中的下一点(让它成为 GlobalDeclarationInstantiation):
ii. If replacing the FunctionDeclaration f with a
VariableStatement that has F as a BindingIdentifier would not produce
any Early Errors for script, then
这一步我没看懂,这个错误说明什么?
我正在尝试找出附件中的这一步。因此,如果我们不使用 VariableStatement 替换 FunctionDeclartion,就不会出现错误。相反,如果我们进行替换,我们会得到错误。那它的例子是什么?
我认为可能适用于该替换的唯一 Script early errors 是
It is a Syntax Error if any element of the LexicallyDeclaredNames of ScriptBody
also occurs in the VarDeclaredNames of ScriptBody
.
所以让我们假设脚本
let x = 42;
{
function x() {}
console.log('block', typeof x);
}
console.log('global', typeof x, typeof window.x);
现在,如果我们用相应的变量声明替换函数声明,我们就会得到脚本
let x = 42;
{
var x;
console.log('block', typeof x);
}
console.log('global', typeof x, typeof window.x);
导致语法错误。所以它 而不是 运行 为函数创建全局变量的条件步骤。
如果与同一脚本声明的词法变量没有冲突,则旧版 Web 兼容性语义会生效:
let y = 42;
{
function x() {}
console.log('block', typeof x);
}
console.log('global', typeof x, typeof window.x);
我找不到任何消息来源谈论规范中的下一点(让它成为 GlobalDeclarationInstantiation):
ii. If replacing the FunctionDeclaration f with a VariableStatement that has F as a BindingIdentifier would not produce any Early Errors for script, then
这一步我没看懂,这个错误说明什么?
我正在尝试找出附件中的这一步。因此,如果我们不使用 VariableStatement 替换 FunctionDeclartion,就不会出现错误。相反,如果我们进行替换,我们会得到错误。那它的例子是什么?
我认为可能适用于该替换的唯一 Script early errors 是
It is a Syntax Error if any element of the LexicallyDeclaredNames of
ScriptBody
also occurs in the VarDeclaredNames ofScriptBody
.
所以让我们假设脚本
let x = 42;
{
function x() {}
console.log('block', typeof x);
}
console.log('global', typeof x, typeof window.x);
现在,如果我们用相应的变量声明替换函数声明,我们就会得到脚本
let x = 42;
{
var x;
console.log('block', typeof x);
}
console.log('global', typeof x, typeof window.x);
导致语法错误。所以它 而不是 运行 为函数创建全局变量的条件步骤。
如果与同一脚本声明的词法变量没有冲突,则旧版 Web 兼容性语义会生效:
let y = 42;
{
function x() {}
console.log('block', typeof x);
}
console.log('global', typeof x, typeof window.x);