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 functions.
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:
>function f(){}
>Object.getOwnPropertyDescriptor(window,"f")
You would get:
Object {value: function, writable: true, enumerable: true, configurable: false}
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 getOwnPropertyNames hasOwnProperty 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!
function f(){}
f = undefined;
window.hasOwnProperty("f");//true
When your modern browser sees a delete statement, that forces it to fall to hash map mode on objects, so delete can be very slow (perf).
In a managed language with a garbage collector, using delete might prove problematic. You don't have to handle your memory, the language does that for you.
In the case you do want to use objects like a map, that's a valid use case and it's on the way :)
function myFunction(){ and not when you do var a = function(){ or obj.property = function(){ (Those are variable declarations and object property declarations, followed by assignment to a function expression ). It's a good point though, the fact my answer wasn't clear to you means it probably won't be clear to other people too, which makes this (and your) comments useful :)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.
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
You could always do:
var testFunc = func()
{
// stuff here
}
//...
testFunc();
//...
testFunc = undefined;
delete in JavaScript has no bearing on freeing memory, see here
testFunc = undefined;, wouldn't that be more appropriate?delete but out of the two undefined is more appropriate
deleteit not just declare it to null