为什么在 try 块中重新声明函数标识符会引发 SyntaxError? [英] Why does redeclaring a function identifier within a try block throw a SyntaxError?

查看:25
本文介绍了为什么在 try 块中重新声明函数标识符会引发 SyntaxError?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下几行 JavaScript

The following lines of JavaScript

try {
    function _free() {}
    var _free = 1;
} finally { }

导致以下错误:

 Uncaught SyntaxError: Identifier '_free' has already been declared

但是,以下两个 JavaScript 代码块没有:

However, the following two blocks of JavaScript code don't:

  1. 没有 try 块作用域:

function _free() {}
var _free = 1;

  • function 范围内:

    function a() {
        function _free() {}
        var _free = 1;
    }
    

  • 为什么?

    (测试环境:Chromium 61.0.3126.0)

    (Testing environment: Chromium 61.0.3126.0)

    推荐答案

    因为块作用域函数声明是一个新的ES6 特性并且变得安全(即在名称冲突时抛出错误,类似于 letconst),但其他情况(无论如何都是程序员错误)需要保留向后兼容并静默覆盖函数.

    Because block-scoped function declarations are a new ES6 feature and were made safe (i.e. throw an error on name collisions, similar to let and const), but the other cases (which are programmer mistakes regardless) needed to stay backwards compatible and silently overwrite the function.

    这篇关于为什么在 try 块中重新声明函数标识符会引发 SyntaxError?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆