我正在编写一个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
删除。这会打破编程模式吗?它是一种有效的编码方式吗?
答案 0 :(得分: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
进行定义,否则删除无法正常工作。
无论如何,如果我是你,我不会打扰"删除"变量,因为垃圾收集器将处理它。
答案 1 :(得分:0)
Difference between variable declaration syntaxes in Javascript (including global variables)?
感谢这些帖子,我现在感觉很清楚。 var x
和this.x
都创建了全局对象的属性,只有前者将x的'DontDelete'属性设置为false,而后者将其设置为true。
对于很多内部细节,前者在“声明性环境记录”中跟踪该变量,而后者在“对象环境记录”(What really is a declarative environment record and how does it differ from an activation object?)中执行相同的操作
答案 2 :(得分:-1)
两个代码都相同。
实际上,当您在JS中创建一个var时,它会附加到窗口对象(如果您没有任何函数,则将其附加)。
var test = 1;
alert(test);
this.test = 2
alert(test);
window.test = 3;
alert(test);