为什么在遮蔽它时不能引用变量?

时间:2018-05-08 10:36:33

标签: javascript scope

为什么块A会导致ReferenceError?

const something = 'something';

console.log ();

try {

    // Block A
    {

        const something = something;

    }

} catch (e) { console.log(e); }

console.log ();

// Block B
{

    const something = 'somethingElse';

}

这可以防止用一个属性遮蔽变量。

1 个答案:

答案 0 :(得分:0)

因为const变量are hoisted,并且您正试图在其自己的临时死区中访问它。有三种方法可以解决这个问题:

  • 只使用不同的变量名称,不要影响非全局变量。这令人困惑。
  • 不要使用const,不要创建本地范围 - 只需在块内重新分配变量即可。此解决方案可能并不适用于所有地方。
  • 使用IIFE:

    const something = 'something';
    (function(something) {
    //        ^^^^^^^^^ inner scope
        …
    }(something));
    //^^^^^^^^^ outer scope