Как удалить функцию
то есть
test=true;
delete test;
=> true
function test() {..}
delete test()
=> false
Удалить обычно работает для переменных, но оно не работает для функций.
Как удалить функцию
то есть
test=true;
delete test;
=> true
function test() {..}
delete test()
=> false
Удалить обычно работает для переменных, но оно не работает для функций.
delete
получить результат объявления .Это часть спецификации .
Если вы посмотрите описание оператора delete в JavaScript:
Если desc. [[Configurable]] истинно, тогда
Удалите собственное свойство с именем P из O.
Возвращает true.
Если вы заходите в браузер и запускаете в консоли следующее:
>function f(){}
>Object.getOwnPropertyDescriptor(window,"f")
Вы получите:
Object {value: function, writable: true, enumerable: true, configurable: false}
Однако вы можете присвоить результат другому значению, которое не является функцией, предполагая, что это ваша последняя ссылка на эту функцию, сбор мусора будет происходить, и он будет удален.
Для всех целей, отличных от getOwnPropertyNames
hasOwnProperty
и таких, что-то вроде f = undefined
должно работать. Для этих случаев вы можете вместо этого использовать функциюExpression и назначить это переменной вместо этого. Однако для таких целей, как hasOwnProperty
, это не удастся, попробуйте в консоли!
function f(){}
f = undefined;
window.hasOwnProperty("f");//true
Когда ваш современный браузер видит оператор delete
, который заставляет его падать в режим хэш-карты на объектах, поэтому delete
может быть очень медленно (perf).
На управляемом языке с сборщиком мусора использование delete
может оказаться проблематичным. Вам не нужно обрабатывать вашу память, язык делает это для вас.
В случае, если вы хотите использовать объекты, такие как карта, действительный прецедент и он на пути:)
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
Вы всегда можете сделать:
var testFunc = func()
{
// stuff here
}
//...
testFunc();
//...
testFunc = undefined;
удалить в JavaScript не имеет никакого отношения к освобождению памяти, см. здесь