이 코드는 어떻게 작동합니까?배열을 속성 이름으로 사용하려면 어떻게해야합니까?
if (!(args in pad)) {
pad[args] = self.apply(obj, arguments);
}
args는 배열이지만 JS 객체의 키이기 때문에 문자열이 아니어야합니까? 수표는 어떻게 작동합니까? array in object
?
전체 맥락 here :
Function.prototype.memoize = function() {
var pad = {};
var self = this;
var obj = arguments.length > 0 ? arguments[i] : null;
var memoizedFn = function() {
// Copy the arguments object into an array: allows it to be used as
// a cache key.
var args = [];
for (var i = 0; i < arguments.length; i++) {
args[i] = arguments[i];
}
// Evaluate the memoized function if it hasn't been evaluated with
// these arguments before.
if (!(args in pad)) {
pad[args] = self.apply(obj, arguments);
}
return pad[args];
}
memoizedFn.unmemoize = function() {
return self;
}
return memoizedFn;
}
하지만 어디에서 주조하나요? JS 인터프리터는 기본적으로 pads [args]를 사용할 때 기본적으로 모든 args 유형을 string으로 변환하려고 시도합니까? – DrStrangeLove
고마워요 !! 이 줄을 설명해주십시오 : var obj = arguments.length> 0? arguments [i] : null; 나는 무엇을 참조합니까? 루프가 없습니다. – DrStrangeLove
즉,'arguments.length> 0' 일 때 함수가 작동하지 않습니다. 왜냐하면'i'는 스코프에서 알려진 변수가 아니므로'ReferenceError'를 던질 것이기 때문입니다. 이 기능이 작동한다면 더 나쁠 것입니다;) – Esailija