为了账号安全,请及时绑定邮箱和手机立即绑定

js 语法问题

js 语法问题

回首忆惘然 2018-08-11 10:09:27
(inner.func)() 这段代码。 第一个括号里应该是会返回一个函数的吧,如果看成下面这样(inner.func)() 等价于这样的话 那么这个函数的this就是window了,那么this.out就是10,显然是不对的我觉得可能可以看成是这样的(inner.func)() 等价于所以是怎么去理解这个括号运算符呢?你们怎么看?。。。。。。。。。。。额。。这里补充一下。。。可能我没说清楚,你们说的什么this的指向。。这些我都懂其实我是想问问js的括号运算符,看看你们怎么理解就是(inner.func)() 这样一个表达式 (inner.func) 给 inner.func 加上这么一个括号能让其发生什么变化吗? 看起来是并没有变化。 因为我看到其他地方有人说()这个运算符会去取其中函数的引用。所以上面的两段代码(function () {    var out = 30;    return this.out; })()这一段,意味着取得只是func的引用,这显然是不符合真实的运行结果的。而我自己模拟出来的一段代码var newFunc = func.bind(inner)  // 前一个括号返回了这个newFunc()                       // 第一个括号运行可以比较好的符合(inner.func) 的实际效果
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

这个问题不错,为方便看清,我把你的例子稍作了修改:

var out = 10;var inner = {    out: 20,    func: function () {        var out = 30;        console.log(this); // 看清 this 的本质
        return this.out;
    }
}console.log( (inner.func)() ) // 20console.log( (function() {    var out = 30;    console.log(this); // 看清 this 的本质
    return this.out;
})() ) // 10

https://img1.sycdn.imooc.com//5ba5e2160001c6fc06320068.jpg

不是 () 在决定 context,是 {} (非 function(){})在决定。{} 就是定义对象,() 的作用是取对象,跟 (1 + 2) * 3 的括号基本一个意思;function(){}() 是语法错误的,至于为啥没定义这么个语法,我也不知道,你知道了告诉我下。




查看完整回答
反对 回复 2018-09-22
  • 1 回答
  • 0 关注
  • 881 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信