Javascript删除一个函数

时间:2013-05-11 14:40:26

标签: javascript

如何删除功能

test=true;
delete test;
=> true

function test() {..}

delete test()
=> false

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

3 个答案:

答案 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

关于删除

的更多说明

答案 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