实现常量变量的正确方法是什么?

时间:2014-03-31 06:52:29

标签: javascript

我在MDN

中找到了以下内容
// THIS WILL CAUSE AN ERROR
function f() {};
const f = 5;

// THIS WILL CAUSE AN ERROR ALSO
function f() {
  const g = 5;
  var g;

  //statements
}

但是没有适当的方法来描述。那我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

ECMAScript 5并不支持这一点。你可以使用几种技巧。

你可以试试这样的事情

var f = (function() {

  var g = 5;

  return function() {
    return g;
  };

})();

现在,每次运行f()时,您都会获得5,并且无法更改g

的值

您可以做的另一件事是使用Object.defineProperty

var f = {};

Object.defineProperty(f, "g", {
  configurable: false,
  value: 5
});

f.g; // 5

即使您尝试更改属性,f.g也会设置为5

f.g = 10;
f.g; // 5

如果您正在使用CommonJS样式模块,那么您可以使用#34; free"来获得此功能。同样,g是不可配置的,并且始终保证为5。

<强> a.js

var g = 5;

function foo() {
  return g;
}

module.exports = foo;

<强> b.js

var a = require("./a");

a(); // 5

答案 1 :(得分:0)

引自const's MDN Docs

  

const的当前实现是Mozilla特定的扩展,不是ECMAScript 5的一部分。 Firefox和Linux支持它。 Chrome(V8)。从Safari 5.1.7和Opera 12.00开始,如果在这些浏览器中使用const定义变量,您仍可以在以后更改其值。它在Internet Explorer 6-10中不受支持,但包含在Internet Explorer 11中.const关键字当前在函数范围内声明了常量(就像用var声明的变量一样)。

     

Firefox,至少从版本13开始,如果你重新声明一个常量,就会抛出一个TypeError。如果为常量指定另一个值,则所有主流浏览器都不会产生任何通知或错误。此类操作的返回值是指定的新值,但重新分配仅在Firefox和Chrome中失败(至少从版本20开始)。

     

const将由ECMAScript 6定义,但具有不同的语义。与使用let语句声明的变量类似,使用const声明的常量将是块作用域。

const不属于ECMA Script 5,因此可能不需要所有环境和浏览器支持。

要获得类似的行为,您可以看到macek's answer