繁体   English   中英

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

[英]What's the proper way to implement constant variable?

我在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
}

但是,没有适当方法的描述。 那么我应该如何实施呢?

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

即使您尝试更改属性, fg仍将设置为5

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

如果您正在使用CommonJS样式模块,则可以“免费”获得此功能。 同样, g是不可配置的,并且始终保证为5。

a.js

var g = 5;

function foo() {
  return g;
}

module.exports = foo;

b.js

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

a(); // 5

引用const的MDN文档

当前const的实现是Mozilla特定的扩展,不属于ECMAScript5。它在Firefox和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的一部分,因此不一定所有环境和浏览器都支持const

要具有类似的行为,您可以查看macek的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM