<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [toc] ## 什么是this >當前函數執行的主體(誰執行的函數this就是誰) > > 函數外面的this是window,我們一般都研究函數內的this指向問題 ``` 小明.eat(); //小明是主體 //小明在哪里吃飯 在哪里就是context ``` ## this是誰和他在哪定義以及在哪執行的沒有任何關系 this只看函數執行的主體。 ``` function fn(){ console.log(this); } fn(); //window //case2:改變定義環境 function fn(){ function b(){ console.log(this); } b(); } fn(); //window //case1:改變執行環境 function fn(){ console.log(this); } ~function(){ fn(); }() ``` 對象下的方法不一定總指向對象 ``` var obj = { name:'obj' ,fn:function(){ console.log(this); } } obj.fn(); //this->obj var f = obj.fn; //把obj.fn的地址給了小f f(); //this->window ``` ## this情況指向小結 > ### 在JS非嚴格模式下(默認模式) >1、 自執行函數中的this一般都是window ``` var obj = { fn:(function(){ //this->window return function(){}; })() } ``` >2、 給元素的某個事件綁定方法,當事件觸發執行對應方法時候,方法中的this一般都是指向元素本身 ``` oBox.onclick = function(){ //this->oBox } ``` >3、 還有一種方式可以快速區分this,當方法執行的時候,看看方法名前面是否有**點**,有的話,`.`前面是誰,`this`就是誰,沒有一般都是window。 >4、 構造函數中的this,是當前類的一個實例 >5、 call/apply/bind,權重高于上面四條 --- > ### 在JS嚴格模式下(讓JS更加嚴謹) 開啟嚴格模式:在當前作用域第一行加上`use strict`開啟嚴格模式,那么當前作用域下再執行JS代碼就是按照嚴格模式處理的 ``` "use strict"; //=>當前JS代碼都開啟了嚴格模式(包括函數中的代碼) ``` ``` ~function(){ "use strict"; //=>只是把當前私有作用域開啟了嚴格模式(對外面全局沒有影響) }(); ``` 在嚴格模式下,如果執行主體不明確指向的是undefined(非嚴格模式下this指向的是window); ``` function fn(){ console.log(this); } fn(); //->window window.fn(); //->window //--- --- --- function fn(){ console.log(this); } fn(); //->undefined window.fn(); //->window ``` ## 其它栗子 事件綁定的函數不一定指向元素 ``` function fn(){ console.log(this); } document.body.onclick=function(){ //this->body fn(); //this->window } ``` this與閉包的綜合栗子 ``` var num = 1 //2 這貨也是window.num ,obj = { num:2 ,fn:(function(num){ //1 this.num *= 2; //window.num = 2 num += 2; //3 return function(){ this.num += 3; //window.num = 6 //obj.num = 6 num++; //4 //5 console.log(num); //4 //5 } })(num) //1 }; var fn = obj.fn; fn(); //4 obj.fn(); //6 console.log(num,obj.num); //6 6 ``` ![](https://box.kancloud.cn/c48532ace405db74c429bac18bc85306_1184x731.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看