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 是因为test1()函数的作用域属于全局作用域吗?为什么不是obj呢?
在Douglas Crockford的《JS语言精粹》中有讲到:
当一个函数并非一个对象的属性时,那么他就是被当做一个函数来调用的:
var sum = add(3,4);//add()在前面已经定义
以此模式调用的函数,this被绑定到全局 对象。这是语言设计上的一个错误。
所以 test1()是函数调用模式,此时的this已经是window对象了。
可以参考this的问题
欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。 温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。