function outer(){
var age = 20;
function inner(){
console.log(this.age);//undefined
}
inner.apply(outer);
}
outer();
请问这里为何会输出undefined呢,另外某个函数内部的函数的this是指向谁,不是说this是指向函数据以执行的作用域吗,在外部函数执行的函数,它的this应该指向外部函数才对啊,为什么是window
呵呵,this对于初学者来说是有点搞的。懂得不多,说说我的理解,大家共同提高!
首先在调试环境下,例如Chrome F12的Console中看看这个程序的运行结果:
age = 1
this.age = 2
function outer(){
this.age = 3
var age = 4
function inner(){
this.age = 5
console.log(this.age)
}
inner.apply(outer)
}
outer()
然后再看看以下一些变量的值:
age
this.age
window.age
outer.age
window.outer.age
相信就有所体会。
另外,不是所有的JavaScript程序最上层的对象都是window。
我注意到你的代码,inner.apply(outer)
。你是想让inner指定使用context为outer?
的确,我测试过代码是成功的,你绑定了this 为 outer。但是outer此时又不是作为函数在调用,而是一个对象在调用。outer又没有age这个属性,所以结果为undefined。
要执行成功,我稍微修改了下代码
<script>
var age = 20;
function outer(){
var age = 20;
function inner() {
console.log(this === outer);//true
console.log(this.age);//20
}
outer.age = 20;//此时,将outer设置一个age属性
inner.apply(outer);
}
outer();
</script>
function outer(){
var age = 20;
function inner(){
console.log(this.age);//undefined
}
inner.apply(outer);
};
outer.age=22;
outer();
这代码怎么感觉怪怪的
如果不进行原型链接,每个function里的this都会指向这个function,js里每个function都是一个通过new都可以得到对象。
其实其实如果不懂可以多举些例子编写调试自己都会得到结论的
调用了谁this就指向谁
1.请问这里为何会输出undefined呢
function outer() {
var age = 20;
function inner() {
console.log(this.age);
}
inner.apply(outer);
}
outer.age = 123;
outer() //123
var age = 20;
inside Function outer
is not work. that's special in javascript
2.try to use prototype
function outer() {
var age = 20;
return function inner() {
console.log(age);
}
//inner.apply(outer); //not used
}
outer()() //20
this way is called closure.
你的this
指向的是outer
啊,只是你的outer.age
确实是undefined
你在function
里面用var
定义变量,和this
没有半毛钱关系