[英]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.