[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)
- 序
- 开发自己的博客
- 面试集合
- 基础
- 1、JavaScript
- js技巧
- 2、CSS
- position之absolute
- em与rem
- inline-block
- background
- 圆角、透明度、渐变
- 关于css中的0和none
- css display:none小结
- z-index小结
- 理解滚动条
- 有关@font-face的问题
- 3、HTML
- URI中依赖协议的URL
- 4、MySQL
- limit使用
- 5、jQuery
- 6、移动Web开发
- 设计稿与分辨率
- 字体
- 图片的自适应
- 7、前端布局bug问题(!<=IE8)
- SEO与页面结构
- seo
- vsphere 虚拟服务器
- 代码里的彩蛋(神注释)
- 玩转HTML5移动页面
- 知识梳理
- JS 键盘码
- 其他资源记录
- temp
- TODO
- 简单有趣的库😎
- xx