[深入理解JS | 青训营笔记]

49 阅读2分钟

深入理解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关键字设置为提供的值,我们必须手动去调用