目录
引出问题
今天做了一道牛客网的题,如下,问最后alert个啥
var color = 'green';
var test4399 = {
color: 'blue',
getColor: function(){
var color = "red";
alert(this.color);
}
}
var getColor = test4399.getColor;
getColor();//函数test4399.getColor
test4399.getColor();
小伙伴们也可以先自行思考一下哈
答案是green,blue
解析:
var getColor = test4399.getColor;
这句话的意思就是已经把test4399的getColor属性赋值给了getColor
原理是:函数在js中既可以当作值传递和返回,也可以当作对象和构造函数
所以getColor就是
function(){
var color = "red";
alert(this.color);
}
相当于的是这个函数单独抽出来赋值给了getColor,而不是指向 test4399
并且这个时候,this指向的是window,所以访问this.color的时候,值就为green
解题思路
这题注意到的解题突破点有下面几个(哈也有联想的
-
this指向问题
-
访问对象的属性
主要还是this指向问题有点搞不清楚(基础不够扎实
参考文章
彻底搞懂JavaScript中的this指向问题 - 知乎 (zhihu.com)
参考文章中注意到的几个知识点罗列一下
不管在什么地方使用this,它必然会指向某个对象,但关键是在JavaScript语言之中,一切皆对象,运行环境也是对象,所以说this的指向是动态的
this的指向为什么会发生改变,this指向的改变到底是什么时候发生的
运行环境改变了,this的指向也跟着动态变化
在JS中,数组、函数、对象都是引用类型,在参数传递时也就是引用传递
Q:引用传递是啥