Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么函数声明会覆盖全局对象的不可写属性?_Javascript_Function_Global Variables_Ecmascript 5_Propertydescriptor - Fatal编程技术网

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中,它不起作用

这当然可以解释。我想知道这个错误是如何在三个不同的UAs中出现的。@GGG没有定义这个行为。该错误已被更正(10.5.e.)FWIW,这是勘误表的来源:@GGG该错误已被标记为,并将于下周添加到Chrome中。
window.someFunction = function() { alert('boom!'); }
someFunction(); // safe
var someFunction = function() { alert('boom!'); }
someFunction(); // safe
function someFunction() { alert('boom!'); }
someFunction(); // boom!