日记8.18

学习日记

1.完成Ae的摄像机跟踪,音频可视化学习,可以初步制作相机画中画效果以及音频可视化背景桌面。

2.完成js面试题的学习

2024.8.18

延迟加载js方式有哪些

1
2
3
4
5
6
延迟加载:async defer
例如:<script defer type="text/javascript" src="a.js"><script>

defer: 等待html全部解析完毕后,才会执行js代码,顺序执行js脚本
async: async和html解析是一起的,不是顺序执行js脚本(谁先加载完谁先执行)

js的数据类型有哪些

1
2
3
基本类型:number string boolean undefined null symbol(es6引入) bigint
引用类型:object

null 和 undefined的区别

1
2
3
设计原因:作者设计js过程中最先设计的是null,借鉴了java语言,但null会被隐式转换成0,很不容易发现错误,然后就设计了undefined来弥补这个问题。

区别:null是一个表示“无”的空指针对象,转换为数值是为0;undefined转换为数值时是NaN。

== 和 ===的区别

1
2
3
首先==比较的是值,===除了比较值,还比较类型。
其中==包含了隐式转换的情况,是javascript自动在后台通过调用valueOf转换
(string = number 或 boolean 或 object 等都会被隐式转换)

js的微任务和宏任务

1
2
3
4
5
6
7
8
9
10
11
1.js是单线程语言,但是js之中有着事件循环的机制,是实现js执行异步操作的底层机制。
2.js的代码执行流程:同步代码 -> 事件循环
3.进入事件循环情况:请求(Ajax),定时器(setTimeout),事件(onclick)等
4.事件循环中包括宏任务和微任务。
区别:
微任务:promise的回调(then,catch,finally)
宏任务:setTimeout等定时器操作

**要执行宏任务的前提是清空了所有的微任务**

流程:同步->事件循环(宏任务和微任务)->微任务->宏任务->宏任务中包含的微任务->...

js作用域

1
2
3
4
5
6
1.除了函数外,js是没有块级作用域。
2.作用域链:内部可以访问外部变量,但是外部不能访问内部的变量。如果内部有,则优先查找内部的,内部没有才查找外部。
3.默认没写变量声明(var,let,const)则是全局变量(window.)
4.js有变量提升机制【变量悬挂声明,js独有】
5.变量提升解释:当js代码被执行时,变量和函数声明会被提升到当前作用域的顶部,这一行为称为变量提升。
6.优先级:声明变量 > 声明普通函数 > 参数 > 变量提升

常见考题 考题1:

1
2
3
4
5
6
7
8
9
10
11
function fun(){
var c =1
function fun2(){ //函数才有块级作用域,在该作用域内,找到了c那么就不会再往外找了
console.log(c) //undefined
var c = 2
console.log(c) //2
}
fun2()
console.log(c) //1
}
fun()

考题2:

1
2
3
4
5
6
7
8
9
10
var name ='a';
(function (){ //var name =undefined;
if( typeof name == 'undefined'){
var name = 'b';
console.log('111'+name);
}else{
console.log('222'+name);
}
})()
//输出结果为111b

考题3:

1
2
3
4
5
console.log(a);
if(false){ //不执行下面语句,只是不赋值,但是a会变量提升
var a = 10;
}
console.log(a); //都输出undefined

考题4:(对应作用域变量优先级)

1
2
3
4
5
6
7
8

function fun(a){
var a = 10;
function a(){}
console.log(a);
}
fun(100);
//打印的是10,声明变量 > 声明普通函数 > 参数 > 变量提升