Javascript 为什么函数声明会覆盖全局对象的不可写属性?
如下所示设置属性描述符:Javascript 为什么函数声明会覆盖全局对象的不可写属性?,javascript,function,global-variables,ecmascript-5,propertydescriptor,Javascript,Function,Global Variables,Ecmascript 5,Propertydescriptor,如下所示设置属性描述符: Object.defineProperty(window, 'someFunction', { value: function() { alert('safe'); }, writable: false, enumerable: false, configurable: false }); …据我所知,应该使window的someFunction属性不可写。如我所料,它适用于函数表达式,无论函数是否直接指定给对象属性 …或分配给全局变量
Object.defineProperty(window, 'someFunction', {
value: function() { alert('safe'); },
writable: false,
enumerable: false,
configurable: false
});
…据我所知,应该使window
的someFunction
属性不可写。如我所料,它适用于函数表达式,无论函数是否直接指定给对象属性
…或分配给全局变量:
但是,它似乎不适用于函数声明:
这种行为是故意的吗?背后的原因是什么?这有文件记录吗?还是我只是犯了一些愚蠢的错误
顺便说一下,我用铬17来测试这个。严格模式似乎没有任何区别。这是一个bug,我在回答时也遇到了这个bug 兼容性检查:
- 在Firefox4+中,它运行良好
- 在Chrome16中,它工作良好
- 在Chrome 17中,它不起作用
- IE8-没有
,因此它不起作用对象。defineProperty
- 在IE9中,它不起作用
- 在Safari 5中,它不起作用
window.someFunction = function() { alert('boom!'); }
someFunction(); // safe
var someFunction = function() { alert('boom!'); }
someFunction(); // safe
function someFunction() { alert('boom!'); }
someFunction(); // boom!