2017-01-16 7 views
2

gulp-uglify를 사용하고 DOM 요소 (jQuery 사용)를 캐싱 할 때 uglify는 $(this)에서 $(void 0)을 만듭니다.

$(document).on("click", "sth",() => { 
    var $this = $(this); 
    ... 
}); 

이 발생합니다 :

$(document).on("click", "sth", function() { 
    var e = $(void 0); 
    ... 
}); 

가 어떻게이 문제를 방지 할 수 있습니까?

+0

[mcve]가 아닙니다. 꿀꺽 마는 일에 문제가 있으면 꿀꺽 꿀꺽 마시는 일을 게시하십시오. 우리는 그것이 어떻게 생겼는지 짐작할 수 없습니다. 'gulp-uglify' 주식은 화살표 함수를 처리 할 수 ​​없으므로'babel' 또는'UglifyJS2'를 사용하고 있습니다 만, 알 방법이 없습니다. –

답변

1

화살표 기능 do not bind this :

화살표 기능은 자신의 이런 상황을 만들지 않습니다, 그래서 this은 포함하는 컨텍스트에서 원래의 의미를 갖습니다. 하여 예에서 this 수단

주변 영역의 this을 말한다. 화살표 함수가 다른 함수 안에 있지 않기 때문에 thisthis을 가리 킵니다.

브라우저에서 글로벌 thisrefers to the window object. 그러나 babel-preset-es2015 사전 설정을 사용하여 babel을 사용하고있는 것으로 추측됩니다. 이 경우 babelyour code is inside an ES6 module이라고 가정합니다. ES6 모듈 안에서 this의 값은 undefined입니다. babel()이 코드를 transpile 의미

:

var $this = $(this); 

이 코드로 :

var $this = $(undefined); 

은 다음은 당신은 가능한 한 위의 줄을 압축하려고하는 uglify() 있습니다.

var e = $(void 0); 

이 어떻게 해결합니까 :이를 위해이 void 0 evaluates to undefinedvoid 0 때문에 당신이와 끝까지 undefined보다 짧은 사실을 악용? 쉬운. 화살표 기능을 사용하지 마십시오.

$(document).on("click", "sth", function() { 
    var $this = $(this); 
    ... 
});