改变this指向的方法 (重点)
call()
1、可以进行函数的调用
2、可以改变this指向,如果没有参数,this指向window
3、可以改变this指向,如果有一个参数,this指向该参数
4、可以改变this指向,如果有多个参数,this指向第一个参数,其余的参数是参数列表
apply()
1、可以进行函数的调用
2、可以改变this指向,如果没有参数,this指向window
3、可以改变this指向,如果有一个参数,this指向该参数
4、可以改变this指向,如果有多个参数,this指向第一个参数,其余的参数是数组
bind()
1、不可以进行函数的调用
2、可以改变this指向,如果没有参数,this指向window
3、可以改变this指向,如果有一个参数,this指向该参数
this指向案例
var name = 'win'
var obj = {
name: 'obj',
getName: function () {
console.log(name); // win
console.log(this.name); // win
var fn = function () {
console.log(name); // win
console.log(this.name); // win
}
fn.call(this)
}.bind()
}
// obj.getName()
obj.getName()
闭包
基本概念
闭包:定义在一个函数内部的函数
本质:父作用域成为永恒作用域
作用:
1、可以访问父函数中的变量
2、可以锁住父函数中的变量
var age = 18
function fn() {
console.log(age);
var str = '字符串'
}
fn()
console.log(str);
闭包之锁住变量(案例)
<button>点赞0</button>
var btn = document.getElementsByTagName('button')[0]
btn.onclick = function () {
var count = 0
return function () {
console.log(this);
count++
console.log(count);
this.innerHTML = `点赞${count}`
}
}()