-
什么是变量提升,为什么存在变量提升,变量与函数是怎么进行提升的,优先级是怎么样
变量提升:该变量可以在未声明之前使用,值为undefined(在代码执行前,先在此法环境中进行了注册)为什么:如果没有变量提升,那么下面代码就没办法执行啦:
function f1(){ f2() }; function f2(){ f1() } // js代码从上往下执行,执行f1就会调用f2,如果没有函数提升,那么f2就还未声明
提升方式:
先对所有函数进行提升(不包括箭头函数与表达式)
1.开辟堆空间
2.存储内容
3.将地址赋值给变量
再对所有变量进行提升。
使用let、const时,不能再声明之前使用变量,叫做暂时性死区。 -
var、let、const区别
var存在变量提升,但是后两者没有;
var的全局声明的变量会挂载到window上,但是后两者不会,因为有块级作用域,var没有;
let、const都是在声明所在块级作用域内有效,并且不允许重复命名;
let声明的变量可以改变、值与类型都可以改变,没有限制;
const一旦声明,就必须立即初始化,不能留到以后赋值; -
map、filter、reduce
map:生成一个新的数组,将数组的每一个元素处理之后再拿回去
filter:生成一个新的数组,通常都是过滤到不需要的元素,将为true的元素放入新的数组返回
reduce:对数组元素通过回调函数转换为一个值,将之前数组遍历产生的结果与当前的遍历项进行计算,不改变原来的数组,prev:上一次回调返回的值,cur:当前的数组元素,0:初始值,一般为0
let arr = [1, 2, 3, 4, 5]
console.log(arr.map(item => (item > 2 ? item : item + 10)) , arr);
// [ 11, 12, 3, 4, 5 ] [ 1, 2, 3, 4, 5 ]
console.log(arr.filter(item => item > 1) , arr);
// [ 2, 3, 4, 5 ] [ 1, 2, 3, 4, 5 ]
console.log(arr.reduce((prev , cur) => prev + cur) , 0); // 15 0
- Promise
定义:是异步编程的一种解决方案,可以从中获取异步操作信息,替代传统的回调事件。
event loop的执行顺序:一开始整个脚本作为一个宏任务执行(执行同步代码),执行过程中同步代码直接执行,再执行宏任务,全部执行完,执行微任务。
延时任务会(set…)被放到下一任宏任务中执行
宏任务包括:script、setTimeout、seInterval、I/O
微任务包括:.then()、.project()