鍍金池/ 問答/HTML/ 關(guān)于javascript,私有作用域中this的指向問題,謝謝各位!!

關(guān)于javascript,私有作用域中this的指向問題,謝謝各位!!

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="../lib/jquery.min.js"></script>
        <script src="https://cdn.bootcss.com/angular.js/1.3.6/angular.js"></script>
        <script src="https://cdn.bootcss.com/angular.js/1.3.6/angular-route.js"></script>
        <title>圖靈機器人</title>
        <script>
            var name = "Top";
            var obj = {
                name:"My Object",
                sayName:function(){
                    alert(this.name);
                }
            }
            obj.sayName();//My Object
            (obj.sayName)();//My Object
            (obj.sayName = obj.sayName)();//Top
        </script>
    </head>
    <body>
    </body>
</html>

這段代碼的第三種寫法為什么this指向的是全局變量?這第三種寫法等價于怎樣的寫法,我改怎樣去理解第三行的這段寫法?謝謝各位大神!!

回答
編輯回答
風(fēng)清揚

前兩種寫法,都是通過obj調(diào)用obj的方法sayName方法
第三種寫法,自認(rèn)為等同于:
var tmp = obj.sayName;
tmp();
這個時候tmp已經(jīng)是全局變量了,相當(dāng)于調(diào)的是window.tmp(),那this肯定是指向window了

2017年1月16日 20:32
編輯回答
熊出沒

第三句話是賦值表達式,返回的是賦值后的結(jié)果。比如a = b,這只是一個賦值語句,把b中引用的值賦給了a,操作完之后就結(jié)束了,之后跟a是什么沒有關(guān)系。主要是賦值表達式有副作用,它返回了b引用的值。比方說b的值是1,那么a = b它的返回結(jié)果就是1。

//這句話操作完成返回的結(jié)果是obj.sayName的引用
(obj.sayName = obj.sayName)();
//相當(dāng)于如下
(function(){
    alert(this.name);
})();
//匿名函數(shù)表達式立即執(zhí)行,this指向window
2017年6月8日 15:25
編輯回答
尤禮
  ( obj.sayName = function(){
                alert(this.name);
            })();
2018年3月19日 05:50