2015-06-09 61 views
3

在此片段中,刪除返回true。那麼爲什麼在刪除後成功調用f?刪除後綁定成員調用

function X() { 
 
    this.f = function() { 
 
     console.log("X::f"); 
 
    } 
 
} 
 

 
x = new X; 
 
var f = x.f.bind(x); 
 
console.log("delete: " + delete x); 
 
f();

+1

你怎麼能過去行「var f ....」? foo未定義 –

+0

我已編輯過片段。 – mirt

+0

我想在全局範圍內創建對象x。 – mirt

回答

5

delete只是刪除了標識符x。該對象仍然存在於內存中,因爲它綁定到f

f仍然引用具有相同綁定上下文的相同功能,即使x沒有。

the MDN page on delete

不像暗示什麼共同的信念,delete運算符有什麼做直接釋放內存(它只能通過打破引用間接確實詳情見內存管理頁。) 。