admin管理员组文章数量:1122853
var,let,const 声明中一般人不知道的几个点
关于var,let,const 声明变量时,有几个特别注意的点,面试的时候极容易被问到,但是很多人特别容易说不清.let的作用域呀,暂时性死区,const作用域等.
文章目录
- 前言
- 一、小姐姐知道的let和const
- 二、小姐姐不知道的let和const
- 1.let
- 2.const
- 总结
前言
前天公司来个小姐姐面试,长的那叫漂亮呀,清澈明亮的瞳孔,弯弯的柳眉,长长的睫毛,薄薄的双唇如玫瑰花瓣娇嫩欲滴,身材气质都超好,就是看一眼就不舍得把眼睛拿开那种,可惜有几个技术点没答上来,刚好被女总监听到,眼福就没保留下来。
一、小姐知道的let和const
问:谈一谈你认识的let和const?
答:这是ES6的新特性,主要有以下区别
- let 存在暂时性死区,不存在变量提升.
- let存在块级作用域,不能被重复声明,var声明的范围是函数作用域.
- const用于存储常量,且不允许被修改.
学前端的人,对于这些肯定都是知道的吧!
二、小姐不知道的let和const
1.let
问:解释一下let的暂时性死区?
答:就是在预编译的时候,像var一样声明,但是保护起来不被访问.
解析:
javascript引擎会注意到后面的let声明,但在此之前不能以任何方式来引用未声明的变量.在let声明之前的执行瞬间被称为'暂时性死区',在此阶段引用,会抛出ReferenceError的错误.
问: var在全局声明的变量是window的属性,let呢?
答:也是的.
解析:
var name = '小甜甜';console.log(window.name); // 小甜甜let age = 18;console.log(window.age); // undefined/*let 声明的变量不会称为window的属性,但仍然在全局作用域生效.let 声明变量的作用域并非全域,而是在当前script域中.
*/
问:如下情况里面的i输出几,外面的输出几?
for (let i = 0; i < 5; i++) {
setTimeout(()=>{
console.log(i)
},0)
}
console.log(i)
答:应该是5吧.
解析:
for (let i = 0; i < 5; i++) {setTimeout(()=>{console.log(i)},0)}console.log(i); //Uncaught ReferenceError: i is not defined/*1 使用 let 声明的迭代变量时,js引擎会为次循环声明一个新的迭代变量.2 for本身有{},存在块级作用域,故外面不能读取其内部变量.*/
2.const
问:const的值是对象时,可以被改变吗?
答:不可以.
解析:
const obj = {name: '小甜甜',age: 12}obj.name = '牛夫人';console.log(obj); // {name: '牛夫人', age: 12}/*const 限制是其指向指的内存地址,并不是值得本身.*/
问:const存在作用域吗?
答:const是在任何地方都是全局的.
解析: const是存在块级作用域的.
const name = '小芳';if (true) {const name = '小花';}console.log(name); // 小芳
总结
在工作中,要多使用const,让代码解析工具提前发现不合理的赋值操作.尽量不使用var!
本文标签: VARletconst 声明中一般人不知道的几个点
版权声明:本文标题:var,let,const 声明中一般人不知道的几个点 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1701444088a404496.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论