1

注釈付きのコメントが付いた定数セクションに気付いたとき、私はhttp://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xmlを読んでいました。

/**
 * The number of seconds in each of the given units.
 * @type {Object.<number>}
 * @const
 */

そして、ガイドは「これにより、コンパイラーが一定性を強制できるようになります」と続けます。

これはv8のものですか?これはどこに文書化されていますか?

私の心は、たぶん、たぶん、v8(または何でも)にタイプ情報を提供できる可能性を秘めています!

4

4 に答える 4

7

GoogleのClosureCompilerはJSDocコメントを受け入れることができ、警告またはエラーを生成します。

たとえば、次のコードを高度な最適化でコンパイルしようとすると、次のようになります。

/** @const */ var MY_BEER = 'stout';

MY_BEER = 'bar';

エラーが発生します:

エラー数:1

JSC_CONSTANT_REASSIGNED_VALUE_ERROR:定数MY_BEERが5行目の文字8に複数回値を割り当てました

constキーワードはECMAScript標準の一部ではないため、推奨されません。

于 2010-08-06T05:09:12.213 に答える
3

Javascriptにはconstキーワードがありますが、Internet Explorerで認識されないため、実際には使用できません。

そのため、GoogleのJavascriptスタイルガイドでは、定数に大文字を使用するか、@constをドキュメントブロックに配置することを推奨しています。

これらの手法はどちらも助言のみであり、コードに実際の制限はありません。

GoogleのClosureCompilerを使用してコードを「コンパイル」すると、「コンパイラ」はコメントブロックでそのようなものを調べ、警告やエラーを生成することさえあることに注意してください。ただし、これは、実際のJavascriptインタープリターでコードを変更せずに実行することとは別です。

于 2010-08-06T05:10:22.023 に答える
0

const(MDC)

そして:const(あなたがリンクしたページ...)

于 2010-08-06T05:02:28.823 に答える
0

この質問は少し古いですが、現在のバージョンのClosureCompilerはconstキーワードを非常にうまく処理します。これはキーワードを置き換えるだけでvar変数が定数であることを理解するためです。

たとえば、高度なモード(--compilation_level ADVANCED_OPTIMIZATIONS)とポリフィル--rewrite_polyfillsの書き換え(、これは重要です。前述のように、「[使用しない]constキーワードはECMAScript標準の一部ではないため」ですが、これにより、varうまく再生されるように書き換えられます。古いブラウザの場合)

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""};
于 2018-11-06T18:13:01.857 に答える