如何删除功能
即
test=true;
delete test;
=> true
function test() {..}
delete test()
=> false
删除通常适用于变量,但不适用于函数。
答案 0 :(得分:21)
delete
function declaration的结果。这是language specification的一部分。
如果您查看JavaScript中delete operator的说明:
如果desc。[[Configurable]]为真,那么
从O中删除名为P的自有属性。
返回true。
如果您转到浏览器并在控制台中运行以下命令:
>function f(){}
>Object.getOwnPropertyDescriptor(window,"f")
你会得到:
Object {value: function, writable: true, enumerable: true, configurable: false}
但是,您可以将结果分配给另一个不是函数的值,假设这是您对该函数的最后一次引用,将发生垃圾收集并将其取消分配。
除了getOwnPropertyNames
hasOwnProperty
以外的所有其他目的,f = undefined
之类的内容应该有用。对于这些情况,您可以使用functionExpression,而是将其分配给变量。但是,对于像hasOwnProperty
这样的目的,它会失败,请在控制台中尝试!
function f(){}
f = undefined;
window.hasOwnProperty("f");//true
当您的现代浏览器看到delete
语句that forces it to fall to hash map mode on objects时,delete
可以是very slow (perf)。
在使用垃圾收集器的托管语言中,使用delete
可能会出现问题。你不必处理你的记忆,语言就是为你做的。
如果您确实想要使用地图等对象,那么这是一个有效的用例和it's on the way:)
答案 1 :(得分:10)
delete
仅适用于对象的属性。如果test()
在一个对象中,你可以删除它,但如果它是一个独立的函数,你就会坚持使用它,除非你取消它或将其定义为其他东西。
var obj = {
test: function() {
console.log("I'm a test");
}
}
obj.test(); //I'm a test
delete obj.test;
obj.test(); //Nothin'
function test() {
console.log("I'm a test");
}
test(); // I'm a test
delete test;
test = undefined;
test(); // TypeError
答案 2 :(得分:3)
你总是可以这样做:
var testFunc = func()
{
// stuff here
}
//...
testFunc();
//...
testFunc = undefined;
JavaScript中的删除与释放内存无关,请参阅here