javascript - js 语法问题
PHP中文网
PHP中文网 2017-04-11 11:36:49
[JavaScript讨论组]
    var out = 10,
        inner = {
            out: 20,
            func: function () {
                var out = 30;
                return this.out;
            }
         }

    console.log( (inner.func)() )    // 20

(inner.func)() 这段代码。 第一个括号里应该是会返回一个函数的吧,如果看成下面这样

(inner.func)() 等价于

(function () {
    var out = 30;
    return this.out;
})()

这样的话 那么这个函数的this就是window了,那么this.out就是10,显然是不对的

我觉得可能可以看成是这样的
(inner.func)() 等价于

var newFunc = func.bind(inner)  // 前一个括号返回了这个
newFunc()                       // 第一个括号运行

所以是怎么去理解这个括号运算符呢?你们怎么看?。。。。。。。。。。。

额。。这里补充一下。。。可能我没说清楚,你们说的什么this的指向。。这些我都懂

其实我是想问问js的括号运算符,看看你们怎么理解
就是

(inner.func)() 这样一个表达式 (inner.func)inner.func 加上这么一个括号能让其发生什么变化吗? 看起来是并没有变化。 因为我看到其他地方有人说()这个运算符会去取其中函数的引用。所以上面的两段代码

(function () {
    var out = 30;
    return this.out;
})()

这一段,意味着取得只是func的引用,这显然是不符合真实的运行结果的。
而我自己模拟出来的一段代码

var newFunc = func.bind(inner)  // 前一个括号返回了这个
newFunc()                       // 第一个括号运行

可以比较好的符合(inner.func) 的实际效果

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
PHP中文网

请告诉我谁在调用func,谁调用它,它内部的this就指代那个调用该方法的对象。所以this不代表window,而代表inner对象。

高洛峰

这里重点应该是func是inner的属性,所以inner.func中的this总是指向调用方法的对象inner。除非,var fun=inner.func; fun();//10 谁调用,就指向谁

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

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