javascript中的this
伊谢尔伦
伊谢尔伦 2017-04-10 18:09:40
[JavaScript讨论组]
function outer(){
            var age = 20;
            function inner(){
                console.log(this.age);//undefined
            }
            inner.apply(outer);
        }
        outer();

请问这里为何会输出undefined呢,另外某个函数内部的函数的this是指向谁,不是说this是指向函数据以执行的作用域吗,在外部函数执行的函数,它的this应该指向外部函数才对啊,为什么是window

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(7)
伊谢尔伦

我注意到你的代码,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>
PHPz

你的this指向的是outer啊,只是你的outer.age确实是undefined
你在function里面用var定义变量,和this没有半毛钱关系

ringa_lee
function outer(){
            var age = 20;
            function inner(){
                console.log(this.age);//undefined
            }
            inner.apply(outer);
        }; 
        outer.age=22; 
        outer();

这代码怎么感觉怪怪的

高洛峰

呵呵,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。

怪我咯

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就指向谁

怪我咯

如果不进行原型链接,每个function里的this都会指向这个function,js里每个function都是一个通过new都可以得到对象。
其实其实如果不懂可以多举些例子编写调试自己都会得到结论的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号