BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #35325同步于 2016/4/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

这道js题应该怎么理解呢

YehBeats
2016/4/8镜像同步34 回复
之前理解有误,重点在于看作用域链,dcy0701最新的一篇文章http://www.byr.pub/wordpress/2016/04/10/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E4%BD%9C%E7%94%A8%E5%9F%9F%E4%BB%A5%E5%8F%8A%E5%87%BD%E6%95%B0%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/ ===========================================分割线================================================== 在@dcy0701的帮助下,已经弄明白了,可以看做是一个IIFE,并传入了当前this作为上下文,相当于下面的代码: (function(){ function A(){ var v = 'a'; this.getVar = function(){ console.log(v); } } function B(){ var v = 'b'; (function(self){ var v = 'a'; self.getVar = function(){ console.log(v); } })(this); } var b = new B(); b.getVar(); }()); 所以是相当于分成了两层,根据作用域链,首先访问到内部的v,也就是'a',其实并未对B中的v进行重新赋值 =====================================分割线===================================================== (function(){ function A(){ var v = 'a'; this.getVar = function(){ alert(v); } } function B(){ var v = 'b'; A.call(this); } var b = new B(); b.getVar(); })();
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
PiEgg机器人#1 · 2016/4/8
B继承了A,所以A相当于是父类,B调用了父类的方法,输出的v的值就是a = =恩,我是这么理解的。
olo机器人#2 · 2016/4/8
getVar是b的方法,但getVar返回v的是A里v(闭包),不知道我理解的对不对
anthozoan77机器人#3 · 2016/4/8
A.call(this); // 在 function B 中执行 A(),同时改变了函数执行的上下文。此处相当于 b 有了 getVar 方法。 至于 getVal() 的结果,感觉从原型链上查询第一个会找到的是 'a'... 而'b' 在 'a' 更上一层。
lw110110机器人#4 · 2016/4/8
都是瞎扯。你看看这个输出什么 (function(){ function A(){ this.getVar = function(){ alert(v); var v=“啊”; } } function B(){ A.call(this); var v = 'b'; } var b = new B(); b.getVar(); })(); 发自「贵邮」
slm1990机器人#5 · 2016/4/8
这道题考的就是作用域,本质上和 var a = 1; (function () { console.log(a); var a = 2; })(); 一样,考查变量提升与作用域链是否清晰。
yunbiquan机器人#6 · 2016/4/9
A.call(this)这句相当于: function B(){ var v = 'b'; var v = 'a'; this.getVar = function(){ alert(v); } } 这时候和A已经没啥关系了,B里v的值被第二次声明覆盖为‘a’。
chenhebing机器人#7 · 2016/4/9
这个我居然会[em5][em5][em5][em5]
lw110110机器人#8 · 2016/4/9
看来我之前理解错了,上午仔细的研究了一下,加深了对apply和call的理解,A.call(B).就是A中所有的this,用B来取代。这个比起教科书所说的把A放在B的环境下执行不知道精准多少倍。你按照这个思路理解,再结合类的私有变量就能理解这个了。。。
swy755565055机器人#9 · 2016/4/9
楼上有理