相关疑难解决方法(0)

已经定义了JavaScript catch参数

我试图理解为什么我得到以下错误,而不是如何解决它.

通过下面的代码来的JSLintJSHint产生了错误"ERR"已定义.

/*jslint white: true, devel: true, onevar: true, browser: true, undef: true, nomen: true, regexp: true, plusplus: true, windows: true, bitwise: true, newcap: true, strict: true, maxerr: 50, indent: 4 */
function xyzzy() {

    "use strict";

    try { /*Step 1*/ } catch (err) { }
    try { /*Step 2*/ } catch (err) { }

}
Run Code Online (Sandbox Code Playgroud)

这里显而易见的假设是catch行为,或应该表现得像一个函数.因此,err既不是一个全局变量,也不是一个局部变量来xyzzy,而是一个参数catch块.

在浏览ECMA-262标准,12.14节描述的 …

javascript scope jslint try-catch

20
推荐指数
1
解决办法
2574
查看次数

为什么catch子句有自己的词汇环境?

请考虑ECMA-262 v5.1的以下摘录(我最近在这个问题中看到过):

词汇环境是一种规范类型,用于根据ECMAScript代码的词法嵌套结构定义标识符与特定变量和函数的关联.词汇环境由环境记录和外部词汇环境的可能空引用组成.通常,词汇环境与ECMAScript代码的某些特定语法结构相关联,例如TryStatement的FunctionDeclaration,WithStatement或Catch子句,并且每次评估此类代码时都会创建新的词法环境.

我认为这意味着catch子句的主体会像函数那样提升自己的变量,但显然情况并非如此:

var a = 1;
try {
    console.log(x); // ReferenceError
} catch(ex) {
    console.log(a); // 1, not undefined
    var a = 3;
}
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?另外,为什么一个catch条款需要自己的词汇环境?

javascript scope try-catch ecmascript-5 hoisting

5
推荐指数
1
解决办法
448
查看次数

标签 统计

javascript ×2

scope ×2

try-catch ×2

ecmascript-5 ×1

hoisting ×1

jslint ×1