1,在回调函数中
回调函数定义:自己定义的、自己没调用、最终执行了。
2、api的学习方法
关注这个api是用来干嘛的 语法;
搞清楚这个api的每一个参数
搞清楚这个api的返回值
setTimeout(function(a,b,c){
console.log(a,b,c)
},1000,1,2,3)
function setTimeout(fn,time) {
fn()
}
2,隐式丢失
怎么防止隐式丢失,bind()方法主要就是将函数绑定到某个对象,
bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()中的第一个的值,
例如:f.bind(obj),实际上可以理解为obj.f(),这时f函数体内的this自然指向的是obj
var obj = {
name:"达姆",
age:18,
wife:"周冬雨",
marry:function () {
console.log(this.name+"❤"+this.wife)
}
}
//bind函数绑定this的指向obj
setTimeout(obj.marry.bind(obj),3000)
function setTimeout(fn,time) {
fn()"如果没有用bind绑定this的指向的话,这里fn内部的this指向window,丢失属性"
}
3、面试题
document.write("周冬雨 ❤ 达姆")
//bind函数绑定this的指向document
var write = document.write.bind(document);
//如果换成下面代码,则会隐式丢失。
var write = document.write
write("周冬雨 ❤ 达姆")//如果没有绑定this指向 document,write内部this会指向window.
4、es5,this相关笔记
在js中 函数是一等公民!
在js中我们不会去区分的函数的定义;
我们会去区分函数的调用形式!!
如果一个函数被普通调用 显式调用了 就称为普通函数
如果一个函数被隐式调用了 就称为方法
如果一个函数被构造调用了 就称为构造函数
函数内部的this指向于谁;看函数调用位置的调用形式
普通调用 fn() this指向window
隐式调用 obj.fn() this指向调用者
显式调用 fn.call(obj) fn.apply(obj) this指向obj
构造调用 new fn() this指向指向构造出来的实例对象
学习this 最难的是 搞清楚每一个回调函数的this指向!!!!(看文档!)
隐式丢失! 使用bind函数来解决!