다음 코드 조각 store.nextId
과 store.cache
에서 사용되는 add
방법. 왜 안될까요 this
?
var store = {
nextId: 1,
cache: {},
add: function(fn) {
if (!fn.id) {
fn.id = store.nextId++;
return !!(store.cache[fn.id] = fn);
}
}
};
제 질문에 답 해주신 모든 분들께 감사드립니다!
사용의 의미는 store
사용과는 약간 다른 this
점에서 당신이 이제까지 취급하는 경우 store.add
(예를 들어, 다른 함수에 인수로 전달), 다음 사용하여 일반 함수로 store
수단을 함수가 여전히 참조 할 것을에 store
사용하는 반면 this
것 대신 전역 개체를 참조하도록합니다.
물론 트레이드 오프는이 add
메서드가 해당 변수 로 원래 식별 된 객체가 아니라 항상 현재 변수로 식별 된 객체를 참조 store
한다는 것입니다. 이 메서드가 실제로 항상 동일한 객체를 참조한다고 가정하면 두 접근 방식의 이점을 얻는 방법은 즉시 호출되는 함수 표현식을 사용하는 것입니다.
var store = (function () {
var store = {
... // exactly as defined in the code you posted, but now 'store'
// refers to the *local* variable 'store', which can never change
};
return store;
})();
즉,이 코드의 저자가 염두에두고 특정 유스 케이스가 있고, 단순히 참조하는 것이 명확라고 생각하지 않으면 그것은 나를 놀라게하지 것이라고 말했다 store
로 store
심지어는 방법 내부.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다