this指向相关问题-JavaScript(绝对值得弄懂)

code

        <script>

            var num = 100;


            var obj = {

                num: 200,

                inner: {

                    num: 300,

                    print: function () {

                        console.log(this.num);

                    }

                }

            }


            obj.inner.print(); //300


            var func = obj.inner.print;

            func();  //100


            (obj.inner.print)(); //300


            (obj.inner.print = obj.inner.print)(); //100

        </script>

问题

第一个和第三个有什么区别?

第三个和第四个有什么区别?


holdtom
浏览 582回答 5
5回答

慕盖茨4494581

看了一下答案,大家的主要困惑在于第三个式子。其实很好理解,不要被第二个和第四个绕进去了。第二个是一个赋值,赋值后的func仅仅是一个函数引用,这个引用丢失了函数原本所在的上下文信息,所以最终是在全局上下文中运行第四个为什么不行?原因是因为赋值表达式的副作用:赋值表达式会返回等号右边的值!因此整个赋值表达式的结果是一个函数,这个函数同样丢失了它所在的上下文。因此结果与2一样了。如果把等号换成逗号,会得到同样的结果,因为逗号表达式也有相同的副作用。再看3,3有什么问题?没问题!因为括!号!没!有!副!作!用!你说它会返回一个表达式,表达式就表达式,whatever,单独看第一个式子的括号前面的部分也是一个表达式,不是吗?

慕后森

1.第一个和第三个没有区别,运行的都是obj.inner.print(),里面的this指向obj.inner.num2.第四个首先你要知道一点,复制操作,会返回所赋的值var a;console.log(a = 5); //5所以(obj.inner.print = obj.inner.print)的结果就是一个函数,内容是function () {&nbsp; &nbsp; console.log(this.num);}在全局下运行这个函数,里面的this指向的就是window,所以(obj.inner.print = obj.inner.print)();的结果就是var num = 100;function () {&nbsp; &nbsp; console.log(this.num);}()// 100

千巷猫影

贴个别人家的博客解答,我觉得海星~

鸿蒙传说

就是首页banner中就有讲的彻底搞懂 JS 中 this 机制

慕哥6287543

用《你不懂js》里的方式来解释:一、三是隐含绑定,this绑定到inner对象上二、四是默认绑定,this绑定到window对象上
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript