乐趣区

关于javascript:Its-magic

js 是世界上最好的语言!!

明天在 v 站看到一个帖子,问道:

var a = 10; {
    a = 99;

    function a() {console.log(a);
    }
    a = 30;
}
console.log(a);

“块级作用域,10!”,我看完便冷笑道。

然而 Google Chrome Version 88.0.4324.150 输入的99 却狠狠地打了我的脸。

来不及多想,就看到底下有老哥给出了一个 GitHub Issue(这就是业余.jpg),issue 中的回复又指向了一篇文章。

粗看了下文章,间接说我的总结:

  1. 严格模式下 ,这里的a 的确应该是 10,非严格模式才是 99,es 标准精确的定义了该个性在严格模式中应有的体现。。
  2. 在 es6 标准之前,块级作用域因为是一个很广泛需要,浏览器各显神通,都有本人的实现,造成了肯定决裂,起初标准出了一个补充,定义了在非严格模式下,该个性应有的体现。
  3. 依据补充标准,以上代码能够视为
var a;
a = 10; 
{let a = function () {console.log(a);}
    a = 99;

    function a() {      // 等同于(var) a = (let) a , 
        console.log(a); // 即把外部 a 的值(99)赋给内部 a,这也是为什么最初打印进去是 99
    }
    a = 30; // 这里只将外部 a 的值改为了 30,内部还是 99
}
console.log(a); // 99

啊,奇怪而无用的常识又减少了!刷论坛还能水文章,太棒了!(????

退出移动版