결과는 Z로, 콘솔 출력 예시는 다음과 같습니다.
사실 이유는 매우 간단합니다. 문제는 for 루프에 있습니다
여기서 마지막 키 === 'z'이고 다른 속성의 결과는 params['z']인 params[key]를 반환합니다
이것은 객체 복사 함수입니다. 원본 객체와의 유일한 차이점은 클로저로 인해 복사된 객체 a의 속성을 탐색할 수 없다는 것입니다. get 함수가 호출하는 키는 모두 a입니다. = {
}
클로저를 생성하거나 let을 사용하세요
또는 var 키를 let key로 변경하세요
으아악
여기서, Object.defineProperty(this, key, {})여기서 key를 읽고 즉시 사용하므로 예상되는 동작입니다x,y, zObject.defineProperty(this, key, {})这里的key是立即读取使用的,所以是预期行为x,y,z
Object.defineProperty(this, key, {})
key
x,y, z
Object.defineProperty(this, key, {})
x,y,z
Object.defineProperty(this, key, { get : function() { return params[key] }, enumerable : false });
这个函数是未来的一个时间点执行的,所以运行的时候读取的是最后的key值,即z 으아악
z
키
사실 이유는 매우 간단합니다. 문제는 for 루프에 있습니다
으아악여기서 마지막 키 === 'z'이고 다른 속성의 결과는 params['z']인 params[key]를 반환합니다
이것은 객체 복사 함수입니다. 원본 객체와의 유일한 차이점은 클로저로 인해 복사된 객체 a의 속성을 탐색할 수 없다는 것입니다. get 함수가 호출하는 키는 모두
으아악a입니다. = {
}
클로저를 생성하거나 let을 사용하세요
으아악또는 var 키를 let key로 변경하세요
으아악
여기서,
Object.defineProperty(this, key, {})
여기서key
를 읽고 즉시 사용하므로 예상되는 동작입니다x,y, z
Object.defineProperty(this, key, {})
这里的key
是立即读取使用的,所以是预期行为x,y,z
这个函数是未来的一个时间点执行的,所以运行的时候读取的是最后的
이 함수는 미래 시점에 실행되므로 실행 시 마지막key
值,即z
으아악키
값인z
를 읽어옵니다. 이것은 고전적인 폐쇄 문제와 동일합니다.으아악
인쇄된 모든 것은 5입니다. 🎜