2015-09-04 57 views
2

嘿,大家好,我是新來的TypeScript。 我想寫一些函數,參考這個函數和編譯後我得到這個窗口。 我不明白爲什麼它這樣做。 感謝您的任何建議。 下面是代碼編譯後的腳本指的是全局範圍的腳本

TS

var checkSection =() => { 
$('.section').each((index)=> { 
     var $this  = $(this), 
      topEdge:number = $this.offset().top, 
      bottomEdge:number = topEdge + $this.height(), 
      wScroll:number = $(window).scrollTop(); 

     if(topEdge < wScroll && bottomEdge > wScroll) { 
      var current:string = $this.data('section'); 
      console.log('current data attribute ' + current); 
      console.log('current index ' + index); 
     } 
    }) 
} 

JS輸出

var _this = this; 
var checkSection = function() { 
    $('.section').each(function (index) { 
     var $this = $(_this), 
      topEdge = $this.offset().top, 
      bottomEdge = topEdge + $this.height(), 
      wScroll = $(window).scrollTop(); 

     if (topEdge < wScroll && bottomEdge > wScroll) { 
      var current = $this.data('section'); 
      console.log('current data attribute ' + current); 
      console.log('current index ' + index); 
     } 
    }); 
}; 

回答

2

這是arrow operator是什麼 - 保持this的背景下,使得它是同作爲聲明函數的上下文。如果您不想要這種行爲,請不要使用=>。使用function

另外,不要假設this裏面的一個jQuery回調函數是對當前元素的引用。相反,使用傳遞到您的.each回調的元素的句柄:

$('.section').each(function (index, element) { 
    var $this = $(element) 
+0

謝謝你的幫忙!我不知道它,我可以傳遞第二個參數到索引後的每個func內的回調。非常有用謝謝。那只是功能和箭頭符號的區別? – Victorino