It's magic!
Posted HaHa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了It's 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中的回复又指向了一篇文章。
粗看了下文章,直接说我的总结:
- 在严格模式下,这里的
a
确实应该是10,非严格模式才是99, es规范准确的定义了该特性在严格模式中应有的表现。。 - 在es6规范之前,块级作用域由于是一个很普遍需求,浏览器各显神通,都有自己的实现,造成了一定分裂,后来规范出了一个补充,定义了在非严格模式下,该特性应有的表现。
- 根据补充规范,以上代码可以视为
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
啊,奇怪而无用的知识又增加了!刷论坛还能水文章,太棒了!(
以上是关于It's magic!的主要内容,如果未能解决你的问题,请参考以下文章
CF1163E Magical Permutation线性基,构造
精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解
SpringBoot中表单提交报错“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“(代码片段