如何删除功能
即
test=true;
delete test;
=> true
function test() {..}
delete test()
=> false
Run Code Online (Sandbox Code Playgroud)
删除通常适用于变量,但不适用于函数.
Ben*_*aum 22
delete得到函数声明的结果.这是语言规范的一部分.
如果您在JavaScript中查看删除运算符的说明:
如果desc.[[Configurable]]为真,那么
从O中删除名为P的属性.
回归真实.
如果您转到浏览器并在控制台中运行以下命令:
>function f(){}
>Object.getOwnPropertyDescriptor(window,"f")
Run Code Online (Sandbox Code Playgroud)
你会得到:
Object {value: function, writable: true, enumerable: true, configurable: false}
但是,您可以将结果分配给另一个不是函数的值,假设这是您对该函数的最后一个引用,将发生垃圾收集并将其取消分配.
对于除此之外的所有目的getOwnPropertyNames hasOwnProperty,类似的东西f = undefined应该起作用.对于这些情况,您可以使用functionExpression,而是将其分配给变量.但是,出于那些目的,hasOwnProperty它会失败,请在控制台中尝试!
function f(){}
f = undefined;
window.hasOwnProperty("f");//true
Run Code Online (Sandbox Code Playgroud)
当您的现代浏览器看到一个delete语句时,会强制它在对象上落入哈希映射模式,因此delete可能非常慢(perf).
在使用垃圾收集器的托管语言中,使用delete可能会有问题.你不必处理你的记忆,语言就是为你做的.
在你想要使用像地图这样的对象的情况下,这是一个有效的用例,并且它正在路上 :)
Som*_*ica 11
delete仅适用于对象的属性.如果test()是在一个对象中,你可以删除它,但如果它是一个独立的函数,你就会坚持使用它,除非你使它无效或将其定义为其他东西.
var obj = {
test: function() {
console.log("I'm a test");
}
}
obj.test(); //I'm a test
delete obj.test;
obj.test(); //Nothin'
Run Code Online (Sandbox Code Playgroud)
function test() {
console.log("I'm a test");
}
test(); // I'm a test
delete test;
test = undefined;
test(); // TypeError
Run Code Online (Sandbox Code Playgroud)
你总是可以这样做:
var testFunc = func()
{
// stuff here
}
//...
testFunc();
//...
testFunc = undefined;
Run Code Online (Sandbox Code Playgroud)
JavaScript 中的删除与释放内存无关,请参见此处
| 归档时间: |
|
| 查看次数: |
52157 次 |
| 最近记录: |