25

如何删除函数

IE

test=true;
delete test;
=> true

function test() {..}

delete test()
=> false

删除通常适用于变量,但不适用于函数。

4

3 回答 3

26

不,你不能声明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

关于删除的更多说明

于 2013-05-11T14:47:15.250 回答
13

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
于 2013-05-11T14:49:49.090 回答
4

你总是可以这样做:

var testFunc = func() 
{
    // stuff here
}

//...
testFunc();
//...

testFunc = undefined;

JavaScript 中的 delete 与释放内存无关,请参见此处

于 2013-05-11T14:47:49.400 回答