Javascript удалить функцию - программирование
Подтвердить что ты не робот

Javascript удалить функцию

Как удалить функцию

то есть

test=true;
delete test;
=> true

function test() {..}

delete test()
=> false

Удалить обычно работает для переменных, но оно не работает для функций.

4b9b3361

Ответ 1

Нет, вы не можете 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

Некоторые примечания по удалению

Ответ 2

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

Ответ 3

Вы всегда можете сделать:

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

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

testFunc = undefined;

удалить в JavaScript не имеет никакого отношения к освобождению памяти, см. здесь