1.绑定事件的方法

(1)在html标签中绑定,可以在该元素的properties的属性中可以查看到,也可以在事件监听中看到

<button onclick="show()">点击<button>

一个事件触发两种方法

<button onclick="show();print()"><button>

(2)js事件绑定,可以在该元素的properties的属性中可以查看到,也可以在事件监听中看到

<button id="btn">点击<button>

<script>
    let btn = document.querySelector("#btn")
    btn.onclick = function() {}
<script>

用js绑定的方法,一个事件不能同时绑定方法

(3)事件监听,只能在该元素的事件监听中看到

<button id="btn">点击<button>

<script>
    let btn = document.querySelector("#btn")
    btn.addEventListener("click",function(){})
<script>

用事件监听的方法,可以同时绑定多个方法

2.执行上下文

(1)上下文 vs 作用域

(1)首先需要说明的是上下文和作用域是不同的概念

(2)每个函数调用都有与之相关的作用域和上下文。从根本上说,作用域是基于函数,而上下文是基于对象

(3)作用域是和每次函数调用时变量的访问有关,并且每次调用都是独立的。上下文总是关键字 this 的值,是调用当前可执行代码的对象的引用。

(2)“this” 上下文

(1)上下文通常是取决于一个函数如何被调用。当函数作为对象的方法被调用时,this 指向调用方法的对象

(2)当调用一个函数时,通过 new 操作符创建一个对象的实例,当以这种方式调用时,this 指向新创建的实例

(3)当调用一个未绑定函数,this 默认指向全局上下文或者浏览器中的window对象。然而如果函数在严格模式下被执行(“use strict”),this 默认指向 undefined

(3)执行上下文

(1)当函数执行时,会创建一个称为执行上下文的内部对象(可理解为作用域,不是前面讨论的上下文)。一个执行上下文定义了一个函数执行时的环境

(2)函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文。

(3)当javascript代码文件被浏览器载入后,默认最先进入的是一个全局的执行上下文。当在全局上下文中调用执行一个函数时,程序流就进入该被调用函数内,此时引擎就会为该函数创建一个新的执行上下文,并且将其压入到执行栈顶部(作用域链)。浏览器总是执行位于执行栈顶部的当前执行上下文,一旦执行完毕,该执行上下文就会从执行栈顶部弹出,并且控制权将进入其下的执行上下文。这样,执行栈中的执行上下文就会被依次执行并且弹出,直到回到全局的执行上下文。

执行上下文分为:

  • 全局执行上下文
    创建一个全局的window对象,并规定this指向window,执行js的时候就压入栈底,关闭浏览器的时候才弹出
  • 函数执行上下文
    每次函数调用时,都会新创建一个函数执行上下文
    执行上下文分为创建阶段和执行阶段
    创建阶段:函数环境会创建变量对象:arguments对象(并赋值)、函数声明(并赋值)、变量声明(不赋值),函数表达式声明(不赋值);会确定this指向;会确定作用域
    执行阶段:变量赋值、函数表达式赋值,使变量对象编程活跃对象
  • eval执行上下文

执行栈:

  • 首先栈特点:先进后出
  • 当进入一个执行环境,就会创建出它的执行上下文,然后进行压栈,当程序执行完成时,它的执行上下文就会被销毁,进行弹栈。
  • 栈底永远是全局环境的执行上下文,栈顶永远是正在执行函数的执行上下文
  • 只有浏览器关闭的时候全局执行上下文才会弹出

3.判断是否是数组

(1)用instanceof

function isArray(arr) {
    console.log(arr instanceof Array)
}

(2)使用Object.prototype.toString.call(arr)

function isArray(o) {
  return Object.prototype.toString.call(o);
}

(3)使用Array.isArray

function isArray(arr) {
    return Array.isArray(arr)
}

4.HTTP状态码

  • 2开头的表示成功
    • 一般见到的就是200
  • 3开头的表示重定向
    • 301永久重定向
    • 302临时重定向
    • 304表示可以在缓存中取数据(协商缓存)
  • 4开头表示客户端错误
    • 403禁止请求
    • 404请求资源不存在
  • 5开头表示服务端错误
    • 500