打卡JS容易忘记的API(二)
打卡JS容易忘记的API(二)执行上下文JS 代码在遇到一个函数执行时,会进入预编译状态,生成执行上下文,然后再执行。做题目谨记解题的几大过程,此类题目就迎刃而解,变得很简单
预编译之前需要了解的a() // afunction a(){ console.log('a')}
console.log(a) //undefinedvar a = 2 // 变量声明 + 变量赋值
口诀:
函数声明整体提升(函数声明永远提升到js文件最前面)
变量 声明提升
任何变量,如果变量未经声明就赋值,归全局所有
function a(){ var b = c = 20 console.log(window.c) console.log(window.b) }a() //c未声明就赋值归全局所有 20 undefined
一切声明的全局变量,就归 window 所有(可以理解为 window 是全局的域对象,定义变量b,相当于往仓库里添加 b)
// 全局范围内 var b = 10console.log(b) //10con ...
打卡JS容易忘记的API(一)
打卡JS容易忘记的API(一)reduce用法语法:arr.reduce(callback,[initialValue])
参数为:
callback (执行数组中每个值的函数,包含四个参数) 1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue)) 2、currentValue (数组中当前被处理的元素) 3、index (当前元素在数组中的索引) 4、array (调用 reduce 的数组)initialValue (作为第一次调用 callback 的第一个参数。)
看一遍就知道怎么用了
var arr = [1, 2, 3, 4];var sum = arr.reduce(function(prev, cur, index, arr) { console.log(prev, cur, index); return prev + cur;})console.log(arr, sum);
打印结果
由于没有设置返回值,reduce遍历的index从1开始1,2,13,3, ...
探索JS类型转换
JS类型转换JS有哪些类型JS 类型分为值类型和引用类型,值类型包括数字、字符串、布尔、Symbol,undefined引用类型包含对象、数组
值类型
let a = 100let a = truelet a = '12'let a = Symbol('12')// 使用typeof检验类型let a = 100 // 'number'let a = true // 'boolean'let a = '12' // 'string'let a = Symbol('12') // 'symbol'let a = undefined // 'undefined'let a = null //历史遗留问题 object
引用类型
let a = [1,2,3] //objectlet a = {b:12} //object
二者唯一区别
值类型用栈模型解释存储,引用类型使用堆栈模型解释
let ...
探索eventloop
事件循环机制浏览器阐述JS脚本scrpit包含异步任务和同步任务,首先同步任务在主线程上执行,当同步任务执行完成后,JS将当前执行栈清空。然后开始执行异步任务,异步任务分为宏任务和微任务,异步任务会放入任务队列当中,宏任务放入宏任务队列,微任务会放入微任务队列。
同步任务执行完之后,先去微任务队列拿出一个微任务,如果执行过程产生了微任务或者宏任务,会将他们放入各自的任务队列。循环往复,直到把微任务队列清空。
紧接着会从宏任务队列中拿出一个宏任务,执行过程中若产生了微任务,首先会把微任务放入微任务队列,然后等这个宏任务执行完成之后就会立即去执行这个微任务,如果没有产生微任务就继续执行下一个宏任务,循环往复,直到清空宏任务。
在宏任务执行完成前的一刻,渲染进程会触发GUI和dom的渲染。
例题分析console.log('script start');setTimeout(function() { console.log('setTimeout');}, 0);Promise.resolve().then(function() ...