js——this关键字
2012-06-04 23:23 折翼的鸟 阅读(292) 评论(0) 编辑 收藏 举报当一个函数并非一个对象的成员时、那么它被当做一个函数来调用、此时this被绑定到全局对象、如:
//创建myObject var myObject = { value : 0, Tempfunc: function(){ var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已 alert(this); //全局作用域 }; return function(){ //注意:这个匿名函数不是对象的直接成员 alert(this.value); } } };
myObject.Tempfunc()(); //undefined
这就是刚才所说的 如果包含this的最近的函数不是某个对象的成员,那么this的值便设为全局对象,
反过来如果包含this的函数(无论什么时候,javascript都会把this放到function内部)最近的函数是某个对象的成员时、那么this的值就是那个对象
如果内部函数想访问对象的属性有一个很容易解决的方案:如果该方法定义一个变量并且赋值为this,那么内部函数就可以通过那么变量访问到this,如下:
//创建myObject var myObject = { value : 0, Tempfunc: function(){ var that = this; var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已 alert(this); //全局作用域 }; return function(){ //注意:这个匿名函数不是对象的直接成员 alert(that.value); } } }; myObject.Tempfunc()(); //0
再来回顾一个简单的闭包例子:
var name = "Global name"; function funcA(){ var name = "FuncA name"; return function(){ alert(this.name); }; } funcA()(); //Global name
其实this和作用域没有什么关系、