2017-02-16 8 views
2

私は文字列を受け取り、その文字列の名前を持つ定数の値を取得するために使用したいと思っています。特に、定数は矢印関数と等しくなります。JavaScriptの定数はどこに保存されていますか?

const foo = (bar) => { return bar } 

私はそれがウィンドウオブジェクトに表示すると予想、それはしません:

let fn = window['foo'] // undefined 

今、私はこれを行う方法を見つけ出すことができる唯一の方法で使用することです古い関数の構文:

function foo(bar) { return bar } 
let fn = window['foo'] // function foo(bar) { return bar } 

関数が定数内に格納されているときに、その名前の文字列から関数を取得する方法はありますか?

編集:

私が最も応答が重要な違いを見つけるように見えてきたように、私は、このような関数の定義を開始したいと思う理由を明確にする必要性を感じています。それは基本的にスコープと変更可能性に帰着します。

thisキーワードを処理するway arrow関数は、矢印関数を使用するのが簡単です。古い動作が明示的に必要でない限り、標準的な動作にする必要があります。

第2に、JavaScriptでの変更方法は、定数としての関数の定義は少し安全だと思います。例:

function foo(bar) { return bar } 
// Elsewhere 
let foo = 4; 
// Back at the ranch 
foo("return this string please") // foo is not a function. 

は最終的に、私はこれがちょうど可変性を減少させ、またthisを使用した場合、より少ない驚きの原因だと思います。

+1

定数または変数の名前と関数名を混同しないでください。彼らは別物です。名前付き関数を作成すると、副作用と同じ名前の変数が作成されます。あなたの無名関数(矢印で作成)には名前はありません。 – Quentin

+0

"古い関数の構文" - これは構文について考える良い方法ではありません。矢印関数はJSに導入されたばかりですが、関数式や関数宣言とは異なる*です。既存の機能の新しい構文だけではありません。 – Quentin

答えて

2

グローバル変数にのみ、グローバルオブジェクトで一致するプロパティが割り当てられます。定数を含むその他のものはありません。

定数の値は定数自体を除き自動的には表示されません。

文字列を使用してアクセスする場合は、オブジェクトのプロパティとして格納してください(できればグローバルオブジェクトではありませんが、他のコードとの重大な混乱の恐れがあります)。

関連する問題