💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # var let const三者的区别 let 和 const,因为没有变量提升,所以如果在声明前使用的话会引起报错 ## 变量是否可变 这个是关于const声明的变量的特性,是面试中**经常**被问到的(反正我在面腾讯百度字节都被问到了),const声明的变量不能被重新赋值,如果重新赋值,就会报错,提到这个问题时,就会引出下面的问题 * const声明的对象,对象的属性可以改变吗:可以,const声明的对象,不能重新赋值,但其对象的属性是可以变化的,我的理解是,const声明的变量不能改变,是指这个变量指向内存中哪一段内容不能变,而对于对象来说,我们的变量存储的是一个地址,表示对象在内存中,在堆中所处的位置,而对象的属性改变,并不会改变这个指向 * 如何让声明的对象的属性也不能被改变:我自己想到的方法有:proxy代理,Object.defineProperty劫持set操作,Object.freeze,可能还有别的方法,但我当时只回答了这些 # 箭头函数 箭头函数的`this`是其执行时所在的作用域,所以也无法同个apply,call,bind来改变`this`指向 箭头函数不能使用`arguments`对象,可以使用扩展运算符来代替`arguments`对象 箭头函数不能使用`yield`命令,因此箭头函数不能使用 generator 函数 箭头函数没有`prototype`属性,而我们知道,`new`构建实例时除了需要对`this`的指向进行指定,还要让实例对象继承该方法的原型,所以箭头函数也就无法使用`new`来构建实例 # set ``` // 指向相同的对象,会静默失败 var obj = {foo:1} var s = new Set([obj]) s.add(obj) // 下面的代码,因为每次地址都不同,所以每次都会存入成功. var s = new Set([{foo:1}]) s.add({foo:1}) ``` # GitHub 上的前端面试 [写给初中级前端的高级进阶指南](https://juejin.cn/post/6844904103504527374#heading-43) [10 个 GitHub 上超火的前端面试项目,打造自己的加薪宝库](https://juejin.cn/post/6895752757534261256)