在javascript中,可以在变量位置使用属性吗?

时间:2017-05-30 11:29:36

标签: 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删除。这会打破编程模式吗?它是一种有效的编码方式吗?

3 个答案:

答案 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)

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?)中执行相同的操作

答案 2 :(得分:-1)

两个代码都相同。

实际上,当您在JS中创建一个var时,它会附加到窗口对象(如果您没有任何函数,则将其附加)。

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