首页 > javascript中的this

javascript中的this

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没有半毛钱关系

【热门文章】
【热门文章】