2017-05-30 39 views
0

我正在寫一個JavaScript文件,最後銷燬顯示模式的變量。在javascript中,可以在變量的位置使用屬性嗎?

var variable = function() { 
    var data = 3; 

    function getme() { 
    return data; 
    } 

    return { 
    fdata: data, 
    me: getme 
    }; 
}(); 

由於變量沒有內置刪除選項,可以用這樣的屬性替換它。

this.variable = function() { 
    var data = 3; 

    function getme() { 
    return data; 
    } 

    return { 
    fdata: data, 
    me: getme 
    }; 
}(); 

因爲,屬性可用delete property_name刪除。這會破壞編程模式嗎?它是一種有效的編碼方式嗎?

+1

在兩個例子中,'data'是在一個不同的範圍,並且不會被返回語句訪問。函數'variable'(不管屬性與否)都不會被調用。 – evolutionxbox

+0

對不起@evolutionxbox ..我編輯 –

+0

(psst,兩個示例現在都是一樣的) – evolutionxbox

回答

-1

兩個代碼都是一樣的。

事實上,當你在JS中創建一個var時,它被附加到窗口對象(或者如果你不在任何函數中)。

var test = 1; 
 
alert(test); 
 
this.test = 2 
 
alert(test); 
 
window.test = 3; 
 
alert(test);

+0

這並不回答OP的問題,就像在給定的例子中給出的變量是在函數內創建的那樣。 – evolutionxbox

0

假設你有一個全局變量foo,你想刪除它。你不能只爲delete,因爲它只適用於屬性。

你可以做的是明確聲明一個全局變量:

window.foo = 'bar'; // this == window (if not in any function) 

然後你就可以刪除:

delete window.foo; 

現在,如果您嘗試訪問它,你將得到:

console.log(foo) // ReferenceError 
console.log(window.foo) // undefined 

您不能只用var foo否則刪除將不起作用。

無論如何,如果我是你,我不會打擾「刪除」變量,因爲垃圾回收器會處理它。

+0

window.foo和this.foo都是一樣的 –

+0

取決於,如果你處於嚴格模式,那麼函數中的'this'等於'undefined',除非你使用'bind','call'等。 – Fahmi

0

http://webcache.googleusercontent.com/search?q=cache:auElwuFsub0J:perfectionkills.com/understanding-delete/+delete+javascript&cd=2&hl=en&ct=clnk

Difference between variable declaration syntaxes in Javascript (including global variables)?

多虧了這些帖子,我現在感覺好多清楚。 var xthis.x都創建全局對象的屬性,唯一的區別是前集x的'DontDelete'屬性爲false,而後者將其設置爲true。

對於多內部細節,前者跟蹤該變量的在「聲明環境記錄」和後者則在「對象環境記錄」相同(What really is a declarative environment record and how does it differ from an activation object?

相關問題