@javascript中的常量?

@javascript中的常量?,javascript,google-closure-compiler,Javascript,Google Closure Compiler,当我在阅读时,我注意到在常量部分中有注释: /** * The number of seconds in each of the given units. * @type {Object.<number>} * @const */ /** *每个给定单位的秒数。 *@type{Object.} *@const */ 然后,指南继续说“这允许编译器强制执行常量属性。” 这是v8引擎吗?这在哪里有记录 我的脑子里充满了可能,只是可能,我可以提供v8(或任何类型)的类型信息

当我在阅读时,我注意到在常量部分中有注释:

/**
 * The number of seconds in each of the given units.
 * @type {Object.<number>}
 * @const
 */
/**
*每个给定单位的秒数。
*@type{Object.}
*@const
*/
然后,指南继续说“这允许编译器强制执行常量属性。”

这是v8引擎吗?这在哪里有记录

我的脑子里充满了可能,只是可能,我可以提供v8(或任何类型)的类型信息

和:

而且:

谷歌可以接受,它将生成警告或错误

例如,如果要使用高级优化编译以下代码:

它将生成一个错误:

错误数:1

JSC_常量_重新分配_值_错误:常量MY_BEER在第5行第8个字符处多次分配值

他们不鼓励使用
const
关键字,因为它不是ECMAScript标准的一部分。

谷歌可以接受,它会生成警告或错误

例如,如果要使用高级优化编译以下代码:

它将生成一个错误:

错误数:1

JSC_常量_重新分配_值_错误:常量MY_BEER在第5行第8个字符处多次分配值


他们不鼓励使用
const
关键字,因为它不是ECMAScript标准的一部分。

Javascript中有一个const关键字,但Internet Explorer无法识别它,因此您无法真正使用它

这就是为什么谷歌的Javascript风格指南建议对常量使用大写字母,或者将@const放在文档块中

这两种技术都只是建议性的,对代码没有实际的限制


请注意,当您使用“编译器”来“编译”某些代码时,将在注释块中查看这些内容,甚至生成警告和错误。但这与在实际的Javascript解释器中运行未经修改的代码是分开的。

Javascript中有一个const关键字,但Internet Explorer无法识别它,因此您无法真正使用它

这就是为什么谷歌的Javascript风格指南建议对常量使用大写字母,或者将@const放在文档块中

这两种技术都只是建议性的,对代码没有实际的限制


请注意,当您使用“编译器”来“编译”某些代码时,将在注释块中查看这些内容,甚至生成警告和错误。但是这与在实际的Javascript解释器中运行未经修改的代码是分开的。

这个问题有点老了,但是当前版本的Closure编译器将非常好地处理
const
关键字,因为它只会将其替换为
var
,并理解变量是一个常量

例如,对于高级模式(
--编译级高级优化
)和polyfill重写(
--重写
),这一点很重要,如前所述,“[不要使用]
常量
关键字,因为它不是ECMAScript标准的一部分”,但这会将其重写为
var
,以便与较旧的浏览器配合使用)


这个问题有点老了,但是当前版本的闭包编译器将非常好地处理
const
关键字,因为它将用
var
替换它,并理解变量是一个常量

例如,对于高级模式(
--编译级高级优化
)和polyfill重写(
--重写
),这一点很重要,如前所述,“[不要使用]
常量
关键字,因为它不是ECMAScript标准的一部分”,但这会将其重写为
var
,以便与较旧的浏览器配合使用)


有趣的是,我在(错误中)设置location以更改URL时收到了此错误消息,而我本应设置location.href。乍一看,错误消息不太明显:“常量位置多次赋值…”因此,对于非大写赋值也会出现此错误!有趣的是,我在(错误中)设置location以更改URL时收到了此错误消息,而我本应设置location.href。乍一看,错误消息不太明显:“常量位置多次赋值…”因此,对于非大写赋值也会出现此错误!
/** @const */ var MY_BEER = 'stout';

MY_BEER = 'bar';
const get_selected_text = (/** @return {function():string} */ function() {
    if (window.getSelection || document.getSelection) {
        return function () {
            const selection = /** @type {function():Object<string,?>} */ (window.getSelection || document.getSelection)();
            if (typeof selection['text'] === "string") {
                return selection['text'];
            } else {
                return selection.toString();
            }
        };
    } else if (document.selection && document.selection.type !== "Control") {
        return function () {
            return document.selection.createRange().text;
        };
    }
    return function () {
        return '';
    };
})();
var i=window.getSelection||document.getSelection?function(){var a=(window.getSelection||document.getSelection)();return"string"===typeof a.text?a.text:a.toString()}:document.selection&&"Control"!==document.selection.type?function(){return document.selection.createRange().text}:function(){return""};