this指向
关于 this 指向,部分情况要区分严格模式和非严格模式(正常模式):
- 作为普通函数调用:严格模式下,this的值是 undefined,非严格模式下,this指向全局对象。
- 作为方法调用:this指向所属对象。
- 作为构造函数调用:this指向实例化的对象。
- 通过call, apply, bind调用:如果指定了第一个参数thisArg,this的值就是thisArg的值(如果是原始值,会包装为对象);如果不传thisArg,要判断严格模式,严格模式下this是undefined,非严格模式下this指向全局对象。
严格模式通过在脚本或函数的头部添加
"use strict";
表达式来声明。严格模式和非严格模式的区别
案例一
1 | var num = 1; |
非严格模式下输出:1
、3
、3
、4
、4
严模式下报错:Cannot read property 'num' of undefined
案例二
1 | var num = 10 |
非严格模式下输出:22
、23
、65
、 30
严模式下报错:Cannot set property 'num' of undefined