第三十三彈-this、閉包

一、問答

1.apply、call 有什么作用,什么區(qū)別?

call和apply都能改變執(zhí)行上下文(this的指向),它們唯一的區(qū)別是傳遞參數(shù)的方式不同,call是一個(gè)一個(gè)的傳遞參數(shù),而apply是傳遞一組數(shù)組或者類數(shù)組對象作為參數(shù)
示例:
apply

      function getMin(){
        return Math.min.apply(null,arguments); //這里我們無法確切知道參數(shù)是幾個(gè),使用apply
      }
      console.log(getMin(1,2,3,4));     //1

call

      function join(str){
        return Array.prototype.join.call(str);   //參數(shù)只有一個(gè),是確定的使用call
      }
      console.log(join("hello"))    //  "h,e,l,l,o"  

二、代碼

1.當(dāng)函數(shù)作為對象的方法調(diào)用時(shí) this指代當(dāng)前對象

        var john = {
            firstName: "John"
        }
        
        function func() {
            alert(this.firstName + ": hi!")
        }
        john.sayHi = func
        john.sayHi()            //    "John:hi"

2.在函數(shù)被直接調(diào)用時(shí)this綁定到全局對象

        func()
      function func() {
        alert(this)    // [object Window]
      }

3.內(nèi)部嵌套函數(shù)的this不是父函數(shù) 而是全局對象

      function fn0(){
          function fn(){
              console.log(this);      //Window
          }
          fn();
      }
      fn0();

4.在事件處理程序中this代表事件源DOM對象(低版本IE有bug,指向了window)
setTimeout和setInterval 這兩個(gè)方法執(zhí)行的函數(shù)this也是全局對象

      document.addEventListener('click', function(e){
          console.log(this);                                  //document
          setTimeout(function(){
              console.log(this);                               //Window
          }, 200);
      }, false);
  1. call函數(shù)的第一個(gè)參數(shù)就是函數(shù)執(zhí)行上下文,就是this的值
      var john = {
        firstName: "John"
      }

      function func() {
        alert( this.firstName )            //join
      }
      func.call(john)

6.call函數(shù)的第二個(gè)參數(shù)以后就是func的入?yún)?/p>

      var john = {
        firstName: "John",
        surname: "Smith"
      }

      function func(a, b) { 
        alert( this[a] + ' ' + this[b] )
      }
      func.call(john, 'firstName', 'surname')   // "John Smith"

7.以下代碼有什么問題,如何修改?

      var module= {
        bind: function(){
          $btn.on('click', function(){
            console.log(this) //this指什么 this指代的是$btn 
            this.showMsg();
          })
        },
        showMsg: function(){
          console.log('饑人谷');
        }
      }

this.showMsg()中的this指代的$btn 而不是module,應(yīng)改為

      var module= {
        bind: function(){
          var me=this;
          $btn.on('click', function(){
            me.showMsg();
          })
        },
        showMsg: function(){
          console.log('饑人谷');
        }
      }

參考文檔:
饑人谷課件-this
阮一峰blog


本教程版權(quán)歸小韓同學(xué)和饑人谷所有,轉(zhuǎn)載須說明來源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. apply、call 、bind有什么作用,什么區(qū)別? call ,apply的作用:調(diào)用一個(gè)函數(shù),傳入函數(shù)...
    Rising_suns閱讀 434評論 0 0
  • 作業(yè) this 相關(guān)問題 問題1: apply、call 有什么作用,什么區(qū)別apply()和call()函數(shù)都可...
    饑人谷_桶飯閱讀 459評論 0 0
  • apply、call 有什么作用,什么區(qū)別 使用call和apply方法,可以改變對象方法的運(yùn)行環(huán)境。 call ...
    coolheadedY閱讀 389評論 0 0
  • 簡答題 1.apply、call 有什么作用,什么區(qū)別 call apply,調(diào)用一個(gè)函數(shù),傳入函數(shù)執(zhí)行上下文及參...
    GarenWang閱讀 580評論 1 4
  • this對象是在運(yùn)行函數(shù)時(shí)基于函數(shù)的運(yùn)行環(huán)境綁定的;全局環(huán)境中,this對象就是window,而當(dāng)函數(shù)被作為某個(gè)對...
    章丸丸閱讀 176評論 0 0

友情鏈接更多精彩內(nèi)容