猿问

是因为test1()函数的作用域属于全局作用域吗?为什么不是obj呢?

var a = 'global';var obj = {
	a : 'local',
	test : function(){		function test1(){
			alert(this.a);//global
		}
		alert(this.a);//local

		test1();//所有者是window
	}
};
obj.test();

为什么第一个a弹出的值是global 它的this指向了window


慕莱坞森
浏览 98回答 3
3回答

慕标5832272

方法调用的时候,会有this指针的传递例如:a.doSomething();那么,在doSomething这个函数域中,this指针指向的就是对象a如果直接调用doSomething(),那么,this指针指向的是全局对象,即window

ITMISS

function test1(){    alert(this.a);//global}上面格式的声明函数都是全局作用域而test1 = function() {} or {test1 : function() {}}这种格式声明的函数则距具有和变量(属性)相同的作用域

阿波罗的战车

this的指向是在执行的时候绑定的。this指向和函数调用的方式有关。obj.test()是test作为对象的方法调用的,所以test中的this指向这个对象,因此输出obj中的a;而test1()在虽然在test中执行,但是和作用域无关。作为函数直接调用的,所以这个this指向了window,因此输出window中的a。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答