javascript – 为什么函数声明覆盖全局对象的不可写属性?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么函数声明覆盖全局对象的不可写属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
设置这样的属性描述符:
Object.defineProperty(window,'someFunction',{
    value: function() { alert('safe'); },writable: false,enumerable: false,configurable: false
});

据我所知,应该使窗口的someFunction属性不可写.它适用于我期望的函数表达式,函数是否直接分配给对象属性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来测试.严格模式似乎没有任何区别.

解决方法

这是一个bug (see Bug #115452),我也在回答 this question时遇到了.

兼容性检查:Test case

>在Firefox 4中,它工作正常.>在Chrome 16中,它工作正常.>在Chrome 17中,它不起作用.> IE8-没有Object.defineProperty,所​​以它不工作>在IE9中,它不起作用.>在Safari 5中,它不起作用.

原文链接:https://www.f2er.com/js/152811.html

猜你在找的JavaScript相关文章