闭包
- 定义
- 闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所需访问的所有局部变量。
- 作用
- 访问函数作用域内的局部变量
- 使函数中的变量被保存在内存中不被释放
- 缺点
- 内存消耗大
- 闭包会在父函数外部,改变父函数内部变量的值
- 常见形式
- 以普通函数返回
- 作为对象的方法返回
- IIFE、闭包综合应用
- 解决变量共享、变量污染问题
- function(i){ ……}(i)
- 通过IIFE对变量存储的改变(避免变量共享错误) (JS(ES5)没有块作用域,变量可能会共享)
- 避免非期望的变量共享
this绑定
this绑定
- this
- 被自动定义在所有函数的作用域中的一个关键字
- 在函数运行期间绑定,与函数定义无关
- this作用
- 复用代码,为函数自动引用合适的上下文对象
- 提供了一个更加优雅而简便的方式来隐式传递一个对象引用
- 绑定规则
- 作为函数直接调用 —— 默认绑定
- 作为对象方法调用 —— 隐式绑定
- 作为构造函数调用 —— new绑定
- 通过 call/apply 间接调用 —— 显式绑定
- 变量 _this、that、self 锁定 this(软绑定)
- 通过函数对象的bind方法来锁定(硬绑定)
- 绑定优先级:**new 绑定 > 显式绑定 > 隐式绑定 > 默认绑定 **
严格模式
- 开启方式:某个函数开启严格模式,得把 “use strict”; 声明放在函数体所有语句之前
- 可以应用到整个脚本或个别函数中
- 相对JavaScript语法和行为的不同
- 变量必须先声明再使用
- 全局作用域中函数中的 this 是 undefined不是window对象
- 构造函数不加 new 调用,this 报错 ,不会指向全局对象
- 函数参数不允许重名
高阶函数
- 高阶函数:对其他函数进行操作的函数,函数的参数和返回值均为函数
- 满足条件(至少一个满足)
- 函数作为参数被传递(常见的形式:回调函数)
- 函数作为返回值输出(常见的形式:闭包)
- 对待不确定的变量或过程