JavaScript高级程序设计(P114):(函数中的)this引用的是函数据以执行的环境对象。按照书上的说法,匿名函数的执行环境是a函数,所以匿名函数里的this应该是a,为什么是window?
function a(){
var h=0;
(function(){
var h=9
console.log(this)
})()
}
a()
JavaScript高级程序设计(P114):(函数中的)this引用的是函数据以执行的环境对象。按照书上的说法,匿名函数的执行环境是a函数,所以匿名函数里的this应该是a,为什么是window?
function a(){
var h=0;
(function(){
var h=9
console.log(this)
})()
}
a()
this
的指向是当前函数的调用者。因此在new
,call
或者apply
之前,所有function
的this
都指向window
。
而new
方法实际创建了一个新的调用环境。
function a(){
//这是私有变量,外部无法看见
var h = 0;
//使用this才允许外部访问
this._h = h;
//这种匿名函数无法访问
(function(){
console.log(this)
})();
//改写为命名函数并用this暴露
function _fun(){
console.log(this)
};
this.func = _fun;
}
//使用new创建一个新的调用环境
var c = new a();
//此时就能看到正确的this指向了
c._h; // 0
c.func(); // a {_h: 0}
执行环境指的是函数执行时的调用者,比如:
var arr = [1,2,3];
arr.reverse();//arr是执行环境
var arr2 = {"0":"a","1":"b","2":"c","length":3};
[].push.call(arr2, 'x');//arr2是执行环境
[].push.apply(arr2, ['y']);//arr2是执行环境
alert('Hello World');//window是执行环境
(function(){console.log(this)})();//这个匿名函数的执行环境是window
所以你的this
是window。
函数的AO对象不能被引用,只有全局的VO对象能被直接引用。相当于a.AO > null >隐式转化为window。匿名函数直接转为null > 隐式转为window.建议看下这篇文章。可以解决this的问题 http://dmitrysoshnikov.com/ec...
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答875 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
a
并不是环境对象啊。http://cooperluan.github.io/j...