深入理解JS
JS的基本概念
数据类型
- 对象(**万物皆为对象**):数组,函数
- 基础类型:字符串,undefined,数字,null,布尔,symbol,bigint
作用域:变量的可见性和可访问性
- 全局作用域
- 函数作用域
- 块级作用域
JS是怎样执行的
全局执行上下文,每个生命周期内只有一个。
函数执行上下文
JavaScript 事件一般用于做什么?
- 页面加载时触发事件
- 页面关闭时触发事件
- 用户点击按钮执行动作
- 验证用户输入内容的合法性
- 用户的一切操作都可以监听
执行上下文是做了什么?
- 绑定This
- 创建词法环境
- 创建变量环境
JS的进阶知识点
let obj = Object.create(null) 与 let obj = {} 有什么区别?
Object.create(null)创建的对象是非常纯净的,没有任何其它元素.
而另一个let创建的对象是带有_proto_的,下面有一些方法与属性,这便是js的原型链继承,它继承了Object的方法和属性。这便是区别
call和apply及bind三者的区别
- apply():apply() 方法调用一个函数,其具有一个指定的this值,以及作为一个数组(或者类似数组的对象)提供的参数,fun.apply(thisArg, [argsArray])
thisArg:在fun函数运行时指定的this值。指定this的值并不一定是函数执行时真正的this值,如果是原始值的this会指向该原始值的自动包装对象。
argsArray:一个数组或者类数组对象,其中的数组元素将作为单独的参数传给fun函数。参数为null或者undefined,则表示不需要传入任何参数。
- call():
call() 调用一个函数,其具有一个指定的this值,以及若干个参数列表,fun.call(thisArg, arg1, arg2, …)thisArg:在fun函数运行时指定的this值。指定this的值并不一定是函数执行时真正的this值,如果是原始值的this会指向该原始值的自动包装对象。
arg1, arg2, …:若干个参数列表
- bind():
创建一个新的函数,当被调用时,将其this的关键字设置为提供的值,在调用新函数时,在任何提供一个给定的参数序列。 bind创建了一个新函数,必须手动去调用。
1.apply和call基本类似,他们的区别只是传入的参数不同。
2.apply传入的参数是包含多个参数的数组
3.call传入的参数是若干个参数列表
4.bind方法会创建一个新的函数,当被调用的时候,将其this关键字设置为提供的值,我们必须手动去调用