함수 선언이 전역 개체의 쓰기 불가능한 속성을 재정의하는 이유는 무엇입니까?
-
13-12-2019 - |
문제
다음과 같이 속성 설명자를 설정합니다.
Object.defineProperty(window, 'someFunction', {
value: function() { alert('safe'); },
writable: false,
enumerable: false,
configurable: false
});
...내가 아는 한, someFunction
의 자산 window
쓸 수 없습니다.그것은 작동합니다 함수 표현식 예상대로 객체 속성에 함수가 직접 할당되는 것인지... 깡깡이
window.someFunction = function() { alert('boom!'); }
someFunction(); // safe
...또는 전역 변수에 할당됩니다. 깡깡이
var someFunction = function() { alert('boom!'); }
someFunction(); // safe
그러나 그것은 작동하지 않는 것 같습니다 함수 선언: 깡깡이
function someFunction() { alert('boom!'); }
someFunction(); // boom!
이 동작은 의도적인 것인가요?그 이유는 무엇입니까?이것은 어디에도 문서화되어 있습니까?아니면 제가 어리석은 실수를 하고 있는 걸까요?
그런데 저는 이것을 테스트하기 위해 Chromium 17을 사용하고 있습니다.엄격 모드는 별 차이가 없는 것 같습니다.
해결책
이것은 버그입니다 (버그 #115452 참조), 답변할 때에도 발생했습니다. 이 질문.
호환성 확인: 테스트 케이스
- Firefox 4+에서는 잘 작동합니다.
- Chrome 16에서는 잘 작동합니다.
- Chrome 17에서는 작동하지 않습니다.
- IE8-에는 없습니다
Object.defineProperty
, 그래서 작동하지 않습니다 - IE9에서는 작동하지 않습니다.
- Safari 5에서는 작동하지 않습니다.
제휴하지 않습니다 StackOverflow