编译后输入脚本是指全局范围

时间:2015-09-04 17:29:04

标签: typescript

嘿所有人我是TypeScript的新手。 我正在尝试编写一些函数,参考函数的这个函数,编译之后我得到了Window的这个函数。 我不明白为什么要这样做。 感谢您的任何建议。 这是代码

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);
        }
    });
};

1 个答案:

答案 0 :(得分:2)

这就是arrow operator的用途 - 维护this的上下文,以便它与声明函数的上下文相同。如果您不想要这种行为,请不要使用=>。使用function

或者,不要假设jQuery回调中的this是对当前元素的引用。相反,使用传递给.each回调的元素的句柄:

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