在浏览该篇博文:(看此篇博客得先看这篇文章!)点击
见到两个this指向的问题,做题也有些许疑惑,故查找多些资料,记录于此
开始给的题目是这样的:
var num = 1;
var myObject = {
num: 2,
add: function() {
this.num = 3;
(function() {
console.log("第1个出现的console:" + this.num);
this.num = 4;
})();
console.log("第2个出现的console:" + this.num);
},
sub: function() {
console.log("第3个出现的console:" + this.num);
}
};
myObject.add();
console.log("第4个出现的console:" + myObject.num);
console.log("第5个出现的console:" + num);
var sub = myObject.sub;
sub();
下面来看正确答案:
第1个出现的console:1
第2个出现的console:3
第4个出现的console:3
第5个出现的console:4
第3个出现的console:4
有两个疑问,一个是我之前未接触的自执行函数,自执行函数就是当它被定义出来,就会自动执行的函数。不需要调用,传参也很方便。,它的内部可以访问全局变量。但是除了自执行函数自身内部,是无法访问它的。this指向是window。
后来自己测试了一下自执行函数
var obj3={
a:8,
print_a:function(){
(function(){
(function(){
console.log("自执行函数的this:"+this);
})();//尝试了更深的自执行函数嵌套
})();
console.log("函数的this:"+this);
},
};
obj3.print_a();
打印出来:
还有一点是
第3个出现的console:4
var sub = myObject.sub;
sub();
对于这段代码,我以为是引用传递,函数指向是同源的
后来写了一段测试代码查看
var x='我是全局变量'
var myObject2={
x:'局部变量。。。',
funx:function(){
console.log(this.x);
}
};
myObject2.funx();//局部变量。。。
var funy=myObject2.funx;
funy();//我是全局变量
虽然funy是obj.funx的一个引用,但是实际上,它引用的是funx函数本身。
funy()是一个不带任何修饰的函数调用,应用默认绑定。把this绑定到全局对象或者undefined(严格模式)上
这段代码也就相当于:
var funy=function(){
console.log(this.x);
}