【问题标题】:Why does a function declaration override non-writable properties of the global object?为什么函数声明会覆盖全局对象的不可写属性?
【发布时间】:2012-03-29 23:17:59
【问题描述】:

像这样设置属性描述符:

Object.defineProperty(window, 'someFunction', {
    value: function() { alert('safe'); },
    writable: false,
    enumerable: false,
    configurable: false
});

...据我所知,应该使windowsomeFunction 属性不可写。正如我所料,它适用于函数表达式,函数是否直接分配给对象属性... fiddle

window.someFunction = function() { alert('boom!'); }
someFunction(); // safe

...或分配给全局变量:fiddle

var someFunction = function() { alert('boom!'); }
someFunction(); // safe

但是,它似乎不适用于 函数声明fiddle

function someFunction() { alert('boom!'); }
someFunction(); // boom!

这种行为是故意的吗?其背后的原因是什么?这在任何地方都有记录吗?还是我只是犯了一些愚蠢的错误?


顺便说一句,我正在使用 Chromium 17 进行测试。严格模式似乎没有任何区别。

【问题讨论】:

    标签: javascript function global-variables ecmascript-5 propertydescriptor


    【解决方案1】:

    这是(see Bug #115452)的一个bug,我在回复this question的时候也遇到了。

    兼容性检查:Test case

    • 在 Firefox 4+ 中,它运行良好。
    • 在 Chrome 16 中,它运行良好。
    • 在 Chrome 17 中,它不起作用。
    • IE8-没有Object.defineProperty,所以不起作用
    • 在 IE9 中不起作用。
    • 在 Safari 5 中,它不起作用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 2019-10-31
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多