Ответ 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
Некоторые примечания по удалению
-
Когда ваш современный браузер видит оператор
delete
, который заставляет его падать в режим хэш-карты на объектах, поэтомуdelete
может быть очень медленно (perf). -
На управляемом языке с сборщиком мусора использование
delete
может оказаться проблематичным. Вам не нужно обрабатывать вашу память, язык делает это для вас. -
В случае, если вы хотите использовать объекты, такие как карта, действительный прецедент и он на пути:)