this指向问题。
this指向
ღ 函数预编译过程中,this指向window。
在函数里定义一个this,
function test() {
console.log(this);
}
test();
控制台输出
ღ 在全局作用域里,this指向window。
直接在控制台输出this
ღ call和apply可以改变运行时this的指向。
具体看博客call和apply那节
ღ 谁调用this,this就指向谁。
<script type="text/javascript">
var test = {
a : function (){
console.log(this.name);
},
name : '墨小白'
}
test.a();
</script>
test调用this,所以指向test,最后输出墨小白。
this习题
<script type="text/javascript">
var name = '222';
var a = {
name : '111',
say : function () {
console.log(this.name);
}
}
var fun = a.say;
//a.say把函数引用赋值给fun
fun();
//fun在全局内内执行
//function () {console.log(this.name)}
//此时的this.name指向的时window,所以输出 '222'
a.say();
//对象a调用了this,所以指向对象a,输出'111'
var b = {
name : '333',
say : function(fun) {
fun();
}
}
b.say(a.say);
//...看解析
b.say = a.say;
b.say();
//b对象say属性值变成函数引用function () {console.log(this.name)}
//然后使用b执行,此时是b调用this,所以输出'333'
</script>
b.say(a.say)传参执行,所传参数为函数引用
function () {
console.log(this.name);
}
模拟传参后
var b = {
name : '333',
say : function(fun) {
(function () {
console.log(this.name);
})();
}
}
因为用来传参执行的,所以传参后应该是这种立即执行函数
执行的this并没有被谁调用,所以说指向全局,输出'222'