关于阅读 ES6-let 和 const 命令整理的问题

1、JavaScript声明变量的方式有哪些?

答:六种:var function let const class import

2、ES5和ES6有什么区别?

答:ES5是ECMAScript的第五次修订,在2009年完成标准化;
ES6是ECMAScript第六次修订,在2015年完成,也叫做ES2015;
ES6是在ES5的基础上进行了改进,比ES5更加的简洁,有效的提升了开发的效率;
ES6还增加了一些特性:let和const 、Map和Set、 async和await、
Promise、 for…of 、解构赋值 、Symble、 展开运算符、修饰器@、class继承、proxy代理等

3、let const 和 var声明变量的区别

答:var是ES5中声明变量的方式,用此种方式声明的为全局变量,可重复声明同一个变量,会发生变量提升的现像;
let和const是ES6中新增的变量声明方式,不可以重复声明变量;
let声明的变量不存在变量提升,只在当前块级作用域中生效,即构成了暂时性死区(TDZ);
const用于声明常量,变量也不存在变量提升,只在当前作用域生效,不可以重复赋值

4、ES5中可以怎么实现与ES6中的块级作用域的效果呢?

答:使用IIFE(匿名函数的立即执行)
(function(){ var a = 1; …}())

5、ES5和ES6中的作用域有哪些

答:ES5中只有顶层作用域和函数作用域,ES6增加了块级作用域,且块级作用域可以任意进行嵌套

6、ES6的块级作用域的作用是什么?(为什么需要块级作用域?)

答:一是避免了相同变量名不同层级中的变量覆盖情况,
二是避免循环中声明的计数变量在循环结束后泄露为全局变量。

7、let和const的暂时性死区是什么呢,这个暂时性死区会让 typeof操作并不是百分之百的正确

答:就是在代码块中,let或者const声明变量之前,该变量都是不可以使用的,这个在语法上叫做暂时性死区。
如果在声明之前使用这些变量,此时会报错。下面就是一个暂时性死区的例子:
var a = 111
if(true){ // 暂时性死区
a = 1111; // 报错
typeof a; // 报错
let a;
}

8、ES6规定的暂时性死区和let const声明的变量不能进行变量提升的优点是啥?

答:减少了程序在执行过程中的错误,提高了变量使用和声明时的规范性

9、JavaScript中有哪些作用域

答:全局作用域、函数作用域、块级作用域、词法作用域

10、立即执行匿名函数(IIFE)可以用ES6中的什么特性进行实现?

答:块级作用域

11、ES6中块级作用域的特性有哪些?

答:可以任意嵌套多级;外层变量无法覆盖和读取内层变量;
内层可以定义和外层的同名变量;可以替代ES5中的立即执行匿名函数。

12、函数声明和块级作用域

答:ES5中函数声明只能在顶级作用域和函数作用域中,在块级作用域中声明函数是非法的,
但浏览器支持函数声明在块级作用域中,故而ES5中在块级作用域声明的函数不会报错;
ES6中支持块级作用域中可进行函数声明;
ES5和ES6浏览器中,块级作用域中的函数声明有var一样的效果,会被提升到函数作用域或者全局作用域头部;
ES6中,块级作用域中的函数声明有let的效果,只在块级作用域中生效,作用域之外无影响。

13、ES6中的一些小特性

答:严格模式下,函数声明只能在当前作用域的顶层。
ES6的块级作用域必须有大括号,否则JavaScript引擎会认为不存在块级作用域

14、const的特性

答:声明常量,且不能进行重复赋值;
不能重复声明同名变量;
不能进行变量提升;
只在当前的块级作用域生效,会形成暂时性死区。

15、const的本质

答:本质是变量指向的内存地址不可进行变动,而不是变量的值不能变动

16、简单数据类型和复合数据类型的存储有啥区别?

答:简单数据类型:变量指向的内存地址保存值
复合数据类型:变量指向的内存地址保存指针,指针指向的地方保存值

17、ES6中顶层对象是什么?

答:顶层对象在浏览器中指的是 window或self,在Web Worker中指的是 self,在Node环境中指的是global;
var和function声明的变量为顶层对象的属性;
let、const 和class 声明的变量不属于顶层对象。例如:
var a = 111; window.a // 111
let b = 222;window.b // undefined

18、怎么取得顶层对象?

答:if(typeof self !== undefined) {return self}
if(typeof window !== undefined){return window}
if(typeof global !== undefined){return global}

19、ES2020中引入的顶层对象是什么?

答:引入globalThis作为顶层对象,且任何环境下globalThis都可以找到

猜你喜欢

转载自blog.csdn.net/qq_37600506/article/details/124402304