Javascript删除机制

Javascript删除机制,javascript,Javascript,可能重复: 我有以下代码。我不明白为什么第二次删除失败了 此外,我注意到,即使在我为foo分配了其他内容之后,foo函数仍然存在 是否有方法引用该函数? (假设我希望一个bar2=foo()的行为类似于bar赋值) 谢谢删除仅对可删除属性有效。声明如下的函数: function f(){ } 不可删除 尝试对原始函数声明使用以下语法: foo = function (){var bar=0; return function(){return bar++;}} 请看这里: 您可以通过本文深入

可能重复:

我有以下代码。我不明白为什么第二次删除失败了

此外,我注意到,即使在我为foo分配了其他内容之后,foo函数仍然存在

是否有方法引用该函数?
(假设我希望一个
bar2=foo()
的行为类似于
bar
赋值)


谢谢

删除
仅对可删除属性有效。声明如下的函数:

function f(){
}
不可删除

尝试对原始函数声明使用以下语法:

foo = function (){var bar=0; return function(){return bar++;}}
请看这里:


您可以通过本文深入了解可删除和不可删除属性的解释:

在我这边
delete foo
returned
true
。无法重现您的错误。我运行的代码如下:
function foo(){var bar=0;return function(){return bar++;}}}bar=foo();bar();bar();删除条;foo=foo();foo();foo();删除foo我使用的是javascript控制台。我从中了解到这可能是问题所在。@vyacheslavoronchuk输出为
true
false
,这与OP描述的一致。这是Firebug中的问题(delete在那里工作得很好),您的小提琴按预期工作。
函数f(){
window
window.f=function(){}
?@vyacheslavoronchuk的范围内,第一个在解析时定义,第二个在运行时定义。请参阅。@vyacheslavoronchuk一个定义为具有
DontDelete
属性的全局属性,另一个创建为不具有
DontDelete
属性的全局属性(因为它是通过属性赋值显式创建的)。您可以阅读更多关于它的内容2Anton-谢谢,这很有意义。@user1586156否,因为属性是在属性创建时设置的,而不是在属性值更改时设置的。您创建属性的方式使其不可删除,并且无论您使用何种语法更改其值,该属性都将保持不可删除状态。
foo = function (){var bar=0; return function(){return bar++;}}