面试题
js 基础问题】
var、let、const 区别
函数提升优先于变量提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部
- let、const 声明的变量、常量拥有块级作用域,var 声明的变量作用域是整个函数体
- var 声明的全局变量是全局对象的属性(window 的属性),let 声明的全局变量不是
- const 声明的数据类型不能再赋值,但是对象类型数据的属性和方法还是可以修改的。因为 const 指的是那个内存地址,而引用数据类型保存的是指向那个内存地址的指针
- let、const 声明不存在提升、var 会提升到作用域顶部
- let、const 不可重复声明,重复声明会报错
Object 相关的方法及使用还有属性
箭头函数和普通函数的区别
箭头函数语法更简洁,箭头函数是匿名函数。普通函数定义需要 function 关键字。
箭头函数没有自己的 this,它会捕获自己在定义时(注意,是定义时,不是调用时)所处的外层执行环境的 this,并继承这个 this 值(它只会从自己的作用域链的上一层继承 this)。普通函数全局调用时指向 window 或者 global,作为对象的方法调用时指向这个对象。
箭头函数继承而来的 this 指向永远不变。apply、call、bind 无法改变指向但是也不报错。
箭头函数不能做构造函数使用因为它没有自己的 this 值。用
new
调用会报错。VM156:7 Uncaught TypeError: Fun is not a constructor
箭头函数没有自己的 arguments。不过可以用 rest 参数代替 arguments 对象,访问箭头函数的参数列表。rest 参数就是…。
1
2
3
4let b = (...val) => {
console.log(...val)
}
b(1, 2, 3)箭头函数没有原型 prototype
箭头函数不能用作 Generator 函数,不能使用 yeild 关键字
Promise 相关
Promise 有三种状态:pending(等待)、resolved(完成)、rejected(拒绝)
其他 Promise 相关的在 notion