JS自我复习指南
程序员文章站
2022-06-30 20:48:50
...
this的指向问题:
es6箭头函数解决了this造成的一些问题
1.全局环境下,this 始终指向全局对象(window), 无论是否严格模式;
2.函数直接调用this
(1)非严格模式下,this 默认指向全局对象window
(2)严格模式下,this 默认为undefined
3.es6箭头函数里的this
指的是定义这个函数时外层代码的this
,这句话可以从两个方面理解:(
- es6箭头函数没有自己的
this
- es6箭头函数里的
this
是外层代码(定义时,非执行时)this
的引用
)
var Animal = function() {
this.name = "Animal"; // 下面那一行的this指向的是这外面的this
this.speak = (name,words) => {
console.log(this.name + ' is saying ' + words + '.');
}
}
var cat = new Animal();
cat.speak(22,"miao ~"); // Animal is saying miao ~.
var speak = cat.speak;
speak(33,"miao ~"); // Animal is saying miao ~.
4.this的取值依赖于函数被谁调用
1.如果是使用new关键字来调用函数,那么函数内部的this就是一个全新的对象。
2.如果使用apply、call或者bind来调用一个函数,函数内部的this就将指向传入的第一个参数。(注:使用这几个方法可以改变this的指向)
3.如果函数被作为一个方法进行调用,比如:obj.method() --- 那么this就该函数的调用者。(注:样例中的obj)
"use strict"严格模式:
1.变量使用前要先声明
2.不能对变量执行delete
3.禁止this关键字指向全局对象
4.禁用eval()
5.对象的属性名不能重复
6.不能修改arguments
7.不能在函数内定义arguments变量
8.不能使用arugment.caller和argument.callee。因此如果你要引用匿名函数,需要对匿名函数命名。
上一篇: Java_day01-自我总结
下一篇: cmd外部命令1ping命令详解