web-dev-qa-db-ja.com

JavaScriptでグローバル定数を宣言できますか?

もしそうなら、そのような宣言の構文は何ですか?

38
Giffyguy

Javascriptには、名前付き定数、またはオブジェクトの不変のプロパティという概念はありません。 (ここではES5について話していないことに注意してください。)

Webページに含まれるスクリプト内の関数の外部のように、グローバルスコープで単純なvar宣言を使用してグローバルを宣言できます。

<script>
  var EXACTLY_ONE = 1;

そうすれば、コードはその定数を使用できますが、値は変更できるため(つまり、プロパティが更新されるため)、実際には「定数」ではありません。

編集 —これは古代の質問に対する古代の答えです。 2019年には、ほぼどこでもサポートされているconst宣言があります。ただし、letと同様に、constスコープはvarスコープとは異なることに注意してください。

27
Pointy

「先のとがった」ように慎重に指摘しているように、ECMAscriptにはそのような機能はありません。ただし、 JavaScriptは

const a = 7;
document.writeln("a is " + a + ".");

もちろん、Webブラウザーで実行するためにWebに配置するコードを作成している場合、これはあまり役に立ちません。 :-)

26
Ken

varキーワードで宣言されていない限り、すべてがグローバルです。

定数もありません。 varキーワードなしで単純に宣言できます。

グローバルスコープを確保する場合は、windowオブジェクトにスローできます。

window.GLOBAL_CONSTANT = "value";

これは、任意のスコープ内から実行できます。定数は関数またはクロージャ内で宣言できますが、お勧めしません。

13
Josh K

次のようなゲッターとセッターでそれを行うことができます:

Object.defineProperty(window, 'TAU', { 
    get: function(){return Math.PI*2;}
});

一般的な機能でこれを行う場合:

function define(name, value){
    Object.defineProperty(window, name, { 
       get: function(){return value;},
       set: function(){throw(name+' is a constant and cannot be redeclared.');},
    });
}

// Example use
define('TAU', Math.PI*2);
6
Stuffe

値を変更できないようにするには、関数を使用します。

したがって、代わりに:

var Const_X=12

使用する:

function Const_X() {
return 12;
}
3
leon

新しいブラウザのサポートのみを考慮する場合(または古いブラウザをサポートするためにBabelなどのトランスパイラーを使用している場合)、次のことができます。

  1. 必要な定数を使用してsettings.jsファイルを作成し、エクスポートします。
export const FRUIT = "kiwi";
export const VEGETABLE = "carrot";
  1. 使用するファイルでは、次のようにインポートできます。
import * as Settings from './settings.js'
  1. 次に、定数を使用するには、次のようにします。
console.log("The unchangeable fruit is " + Settings.FRUIT);

これは、特に定数を使用するJavaScriptファイルが複数ある場合、グローバル定数を実装しようとするよりもはるかにクリーンなアプローチです。

3
kojow7

質問に対する直接的な答えは「いいえ」です。ECMA/ JSが関数型プログラミングを簡単に行う方法を作ったとしても、本当に役立ちます。これを回避するために使用する実行可能なハックは、グローバルスコープでconstを宣言し、ラッパー関数を使用することです。以下の例を参照してください。

:)

global_var = 3; //This can change say inside a function etc. but once you decide to make 
                //this global variable into a constant by calling on a function
const make_variable_constant = function(variable)
{
    const constant = variable;
    return constant;
}

const const_global = make_variable_constant(global_var);

:)

オブジェクト指向プログラミングが誇大宣伝だった頃、私のクラスの子供はCインストラクターに、Cはオブジェクト指向ではないと言っていましたが、インストラクターは、Java and C++同様に、Javascriptで関数型プログラミングを行うことはできますが、はるかに難しく、C++で行う方が簡単なときにオブジェクト指向プログラミングをCで行うようなものです。

2
Alvin Baldemeca

記録のために。

// ES6+ code:
const CONSTGLOBAL1=200;  // it is a constant global

function somef() { 
   document.write(CONSTGLOBAL1); // CONSTGLOBAL1 is defined (because it's global)
   const CONSTLOCAL=200; // it's a local constant
   document.write(CONSTLOCAL); // CONSTLOCAL is defined
}       
somef();
document.write(CONSTLOCAL); // CONSTLOCALis NOT defined.

したがって、定数が{}内で定義されている場合はローカルであり、そうでない場合はグローバルです。

0
magallanes