我在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
}
但是没有适当的方法来描述。那我该怎么做呢?
答案 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的当前实现是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。