2013-05-14 53 views
1

有人可以解釋爲什麼刪除在第二個函數不起作用嗎?爲什麼我的JavaScript代碼表現得很奇怪?

var myFunction = (function (val) { 
    delete val; 
    return val; 
})(10); 
console.log(myFunction); 


var myFunction1 = (function() { 
    myVar = "test" 
    delete myVar; 
    return myVar; 
})(); 
console.log(myFunction1); 
+1

請注意,您的變量被稱爲'myFunction'和'myFunction1',但它們實際上並不包含函數,只是函數的返回值。你應該選擇更好的名字。 – meagar 2013-05-14 15:42:51

+1

https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Operators/delete – apsillers 2013-05-14 15:45:07

回答

5

刪除操作符用於刪除屬性而不是對象。

在第一個函數中,val是一個變量,不能被刪除。但是在函數2中,myVar使用簡寫來聲明以在全局對象上創建屬性,並且可以刪除屬性。實際上這是刪除操作符的主要目的。

此外,刪除操作符返回一個布爾值。您可以使用它來更好地瞭解它的工作原理,例如:在您的案例中,console.log(delete val);將打印爲false,console.log(delete myVar);將打印爲真。還值得記住的是,返回值取決於對象是否存在,而不是刪除是否成功。

+1

很好的解釋先生,非常感謝! – RuntimeException 2013-05-14 15:56:53

相關問題