Javascript删除一个函数

Aks*_*hat 19 javascript

如何删除功能

test=true;
delete test;
=> true

function test() {..}

delete test()
=> false
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*aum 22

不,你不能delete得到函数声明的结果.

这是语言规范的一部分.

如果您在JavaScript中查看删除运算符的说明:

如果desc.[[Configurable]]为真,那么

  • 从O中删除名为P的属性.

  • 回归真实.

如果您转到浏览器并在控制台中运行以下命令:

>function f(){}
>Object.getOwnPropertyDescriptor(window,"f")
Run Code Online (Sandbox Code Playgroud)

你会得到:

Object {value: function, writable: true, enumerable: true, configurable: false}

可以做些什么:

但是,您可以将结果分配给另一个不是函数的值,假设这是您对该函数的最后一个引用,将发生垃圾收集并将其取消分配.

对于除此之外的所有目的getOwnPropertyNames hasOwnProperty,类似的东西f = undefined应该起作用.对于这些情况,您可以使用functionExpression,而是将其分配给变量.但是,出于那些目的,hasOwnProperty它会失败,请在控制台中尝试!

function f(){}
f = undefined;
window.hasOwnProperty("f");//true
Run Code Online (Sandbox Code Playgroud)

关于删除的更多说明


Som*_*ica 11

delete仅适用于对象的属性.如果test()是在一个对象中,你可以删除它,但如果它是一个独立的函数,你就会坚持使用它,除非你使它无效或将其定义为其他东西.

对象删除

var obj = {
    test: function() {
        console.log("I'm a test");
    }
}

obj.test(); //I'm a test
delete obj.test;
obj.test(); //Nothin'
Run Code Online (Sandbox Code Playgroud)

功能重新分配

function test() {
    console.log("I'm a test");
}

test(); // I'm a test

delete test;

test = undefined;

test(); // TypeError
Run Code Online (Sandbox Code Playgroud)


ada*_*mjc 5

你总是可以这样做:

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

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

testFunc = undefined;
Run Code Online (Sandbox Code Playgroud)

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