もしそうなら、そのような宣言の構文は何ですか?
Javascriptには、名前付き定数、またはオブジェクトの不変のプロパティという概念はありません。 (ここではES5について話していないことに注意してください。)
Webページに含まれるスクリプト内の関数の外部のように、グローバルスコープで単純なvar
宣言を使用してグローバルを宣言できます。
<script>
var EXACTLY_ONE = 1;
そうすれば、コードはその定数を使用できますが、値は変更できるため(つまり、プロパティが更新されるため)、実際には「定数」ではありません。
編集 —これは古代の質問に対する古代の答えです。 2019年には、ほぼどこでもサポートされているconst
宣言があります。ただし、let
と同様に、const
スコープはvar
スコープとは異なることに注意してください。
「先のとがった」ように慎重に指摘しているように、ECMAscriptにはそのような機能はありません。ただし、 JavaScriptは :
const a = 7;
document.writeln("a is " + a + ".");
もちろん、Webブラウザーで実行するためにWebに配置するコードを作成している場合、これはあまり役に立ちません。 :-)
var
キーワードで宣言されていない限り、すべてがグローバルです。
定数もありません。 var
キーワードなしで単純に宣言できます。
グローバルスコープを確保する場合は、window
オブジェクトにスローできます。
window.GLOBAL_CONSTANT = "value";
これは、任意のスコープ内から実行できます。定数は関数またはクロージャ内で宣言できますが、お勧めしません。
次のようなゲッターとセッターでそれを行うことができます:
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);
値を変更できないようにするには、関数を使用します。
したがって、代わりに:
var Const_X=12
使用する:
function Const_X() {
return 12;
}
新しいブラウザのサポートのみを考慮する場合(または古いブラウザをサポートするためにBabelなどのトランスパイラーを使用している場合)、次のことができます。
export const FRUIT = "kiwi"; export const VEGETABLE = "carrot";
import * as Settings from './settings.js'
console.log("The unchangeable fruit is " + Settings.FRUIT);
これは、特に定数を使用するJavaScriptファイルが複数ある場合、グローバル定数を実装しようとするよりもはるかにクリーンなアプローチです。
質問に対する直接的な答えは「いいえ」です。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で行うようなものです。
記録のために。
// 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.
したがって、定数が{}内で定義されている場合はローカルであり、そうでない場合はグローバルです。