如何删除函数
IE
test=true;
delete test;
=> true
function test() {..}
delete test()
=> false
删除通常适用于变量,但不适用于函数。
如何删除函数
IE
test=true;
delete test;
=> true
function test() {..}
delete test()
=> false
删除通常适用于变量,但不适用于函数。
delete
一个函数的结果。这是语言规范的一部分。
如果您查看JavaScript中删除运算符的描述:
如果 desc.[[Configurable]] 为真,则
从 O 中删除名称为 P 的自己的属性。
返回真。
如果您转到浏览器并在控制台中运行以下命令:
>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
语句时,它会强制它在 objects 上进入 hash map 模式,因此delete
可能非常慢(perf)。
在带有垃圾收集器的托管语言中,使用delete
可能会出现问题。你不必处理你的记忆,语言会为你做这件事。
如果您确实想使用地图之类的对象,这是一个有效的用例,并且正在开发中:)
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
你总是可以这样做:
var testFunc = func()
{
// stuff here
}
//...
testFunc();
//...
testFunc = undefined;
JavaScript 中的 delete 与释放内存无关,请参见此处