2013-06-28 1 views
3

열거 자 메서드가있는 대부분의 라이브러리 (심지어 기본 JavaScript라고 생각합니다)는 이터레이터에 context을 전달할 수 있습니다.JavaScript 열거 형 메서드는 일반적으로 컨텍스트를 허용하는 이유는 무엇입니까?

function reduce(iterator, memo, context){ 
    this.each(function(item, idx, list){ 
     memo = iterator.call(context, memo, item, idx, list) 
    }); 
    return memo; 
} 

bind은 쉽게 동일한 기능을 제공 할 수 있습니까?

stooges.reduce(function(memo, stooge){ 
    ... 
}, context) // as argument vs... 

stooges.reduce(function(memo, stooge){ 
    ... 
}.bind(context)) 

bind 이후 당분간 존재하는이 일이 모든 플랫폼에서 쉽게 사용할 수없는가요? 또는 단순히 bind ing보다 call에 대한 오버 헤드가 적기 때문입니까? 나는 항상 함수가 더 나은 인수가 적을수록 읽는다. 0 인수를 취하는 함수는 1보다 낫다 1은 2를 취하는 것보다 낫다.

+1

을, 그러나 이것은 종류 주관적인 질문. 일부 도서관 저자에게 물어 보는 것이 더 나을 것입니다. –

+0

그럴 때,이 문맥 전달이 바뀔 것이라고 추론합니까? – Mario

+0

작성자가 변경하면 곧 변경됩니다. –

답변

2

.bind을 사용하여 새 함수를 만들고 반환한다. 어떤 경우에는 자바 스크립트 VM에 의해 생성 된 객체/변수의 수를 제한하여 가비지 컬렉터 정리주기를 활용하는 것을 선호합니다.

또한, bind은 (callapply 사용) "에뮬레이션"바인딩 솔루션에 비해 매우 느린 것으로 알려져있다 : Why is Function.prototype.bind slow?

그렇지 않으면 매개 변수로 상황을 전달하는 것이 더 좋은 더 많은 읽을 수 있습니다.

ES6 화살표 기능은 어휘 this을 유지 할 수 있도록, 그래서 더 쉽게 알 수있을 것입니다 : Function.bind`는 (아직) 모든 브라우저에서 지원되지 않습니다 '때문에 거의 확실

// considering object context 
var self = this; 
stooges.reduce((memo, stooge) => (this === self)); 
관련 문제