Skip to content Skip to sidebar Skip to footer

Javascript Delete A Function

How can I delete a function i.e test=true; delete test; => true function test() {..} delete test() => false Delete usually works for variables but it doesn't work for func

Solution 1:

No, you can not delete the result of a function declaration.

This is a part of the language specification.

If you check out the description of the delete operator in JavaScript:

If desc.[[Configurable]] is true, then

  • Remove the own property with name P from O.

  • Return true.

If you go to the browser and run the following in the console:

>functionf(){}
>Object.getOwnPropertyDescriptor(window,"f")

You would get:

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

What can be done:

You can however, assign the result to another value that is not a function, assuming that is your last reference to that function, garbage collection will occur and it will get de-allocated.

For all purposes other than getOwnPropertyNameshasOwnProperty and such, something like f = undefined should work. For those cases, you can use a functionExpression instead and assign that to a variable instead. However, for those purposes like hasOwnProperty it will fail, try it in the console!

functionf(){}
f = undefined;
window.hasOwnProperty("f");//true

Some more notes on delete

Solution 2:

delete only works for properties of objects. If test() was inside an object, you could delete it, but if it's a stand alone function, you're stuck with it, unless you nullify it or define it as something else.

Object Delete

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

obj.test(); //I'm a testdelete obj.test;
obj.test(); //Nothin'

Function Reassign

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

test(); // I'm a testdelete test;

test = undefined;

test(); // TypeError

Solution 3:

You could always do:

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

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

testFunc = undefined;

delete in JavaScript has no bearing on freeing memory, see here

Post a Comment for "Javascript Delete A Function"