this代表的是 执行这个this代码的环境对象
1、在脚本中,this代表的是window全局对象;在全局函数中,this代表的是window全局对象.
2、全局变量会在脚本执行时 把变量名设置为全局对象window的属性;全局函数会在脚本执行时 把函数设置为全局对象window的方法
<script>
var a = 20 //等价于window.a = 20
function fn(){
console.log(this) //window
}
fn()//等价于window.fn()
</script>
3、把this看作函数调用时的调用者。
<script>
function fn () {
console.log(this)//window
}
fn()//这个代码不是fn在调用 fn代表的是一个函数 隐式的window才是调用者
//-----------------------------------------------------------
var obj2={fn:function(){console.log(this)}}
var arr=[]
arr[0]=100
arr[1]=obj2.fn
console.log(arr[1])//打印fn这个函数
arr[1]()//打印arr数组
obj2["fn"]()//打印obj2对象
//---------------------------------------------------------------
var obj={
name:"father",
son:{
name:"son",
say:function(){
console.log(this)
}
}
}
obj.son.say()//打印son对象
var a=obj.son.say //把这个函数赋值给变量a
a() //打印window对象 全局变量a是隐式window对象的属性
var arr=[a]//把函数赋给arr数组
arr[0]()//打印arr数组
</script>
4、 为何要打印this?
this代表了一个对象 常常在项目中我们要给一个对象操作成员
5、补充
匿名函数
<script>
(function(){
console.log(this) //打印window
})();
</script>
小括号 它是一种运算符 指向结果
6、this降低难度
模拟v8去执行js代码 this是谁 不要去看运行时 看调用的代码
1.看this在哪个函数里面:离this这个单词最近(嵌套)的function/方法这个单词就是那个函数,没有就是window
2.这个函数找了 是哪个代码让这个找到的函数执行的 ,直接辨别调用者(调用者和持有者),调用者就为this指向对象
练习:
<script>
obj.fn(this)
var obj={fn:function(){this}}
// obj持有者
//obj.fn //调用者 this指向obj
var a=obj.fn
a()//调用者 this指向window
//所以this指向那个对象具体看那个调用
</script>