第十二节课

作用域和变量提升

  • 作用域(Scope)的概念

    • 作用域的分类

      • 全局作用域:作用于整个script标签内部,或者作用域一个独立的JS文件。

      • 函数作用域(局部作用域):作用于函数内的代码环境

    • 作用域的访问关系

      • 在内部作用域中可以访问到外部作用域的变量,
        在外部作用域中无法访问到内部作用域的变量。
    • 变量的作用域

      • 全局变量

      • 局部变量

    • 作用域的上下级关系

  • 全局作用域

    • 变量的声明提前(变量提升)
      第十二节课 - 图1

    • 函数的声明提前
      第十二节课 - 图2

  • 函数作用域

    • 函数中,使用var关键字声明的变量,会在函数中所有的代码执行之前被声明。

    • 函数中,没有用var声明的变量都是全局变量,而且并不会提前声明。

  • 块级作用域

    • ES6之前没有

      • var
    • ES6+后有

      • let

      • const

第十二节课 - 图3

预编译

  • JavaScript运行三部曲

    • 语法分析

    • 预编译

    • 解释执行

  • 两个规律

    • 任何变量,如果未经声明就赋值,此变量是属于window的属性

    • 一切声明的全局变量,全是window的属性

  • 函数预编译的步骤

    this指向

  • 执行期上下文

  • this

    • this函数内this的指向

    • 箭头函数中this的指向

    • 改变函数内部的this指向

第十二节课 - 图4

第十二节课 - 图5

call、applay和bind

  • call()方法

    • 作用

    • 举例

第十二节课 - 图6

  • apply()方法

    • 作用

    • 举例

第十二节课 - 图7

  • bind()方法

    • 作用

      回调函数

第十二节课 - 图8

高阶函数

  • 概念

    • 当函数A接收函数B作为参数,或者把函数C作为返回值输出时,我们称函数A为高阶函数。

    • 通俗来说,高阶函数对其他函数进行操作的函数。

  • 举例

第十二节课 - 图9

闭包

  • 引入

第十二节课 - 图10

  • 概念

  • 有权访问另一个函数作用域中变量的函数

  • 举例

第十二节课 - 图11

第十二节课 - 图12

  • 作用

    面向对象

  • JS的面向对象

    • constructor—构造器

    • prototype——原型

  • 对象的创建

    • 对象字面量
      第十二节课 - 图13

    • 工厂模式 new Object()
      第十二节课 - 图14

    • 利用构造函数
      第十二节课 - 图15

  • 构造函数

  • 原型