2017-10-23 11 views
0

タイムアウトのコールバックで宣言する必要があるグローバルconst変数を作成したいと思います。このスクリプトは次のようなものです:関数のグローバルconstを宣言する

setTimeout(() => { 
    const hourandminute = new HourAndMinute(); 
}, 1000); 

これは新しいconst変数を作成しますが、コールバックにのみ存在します。次のことを行わずにグローバルにするにはどうすればよいですか。

let hourandminute; 

setTimeout(() => { 
     hourandminute = new HourAndMinute(); 
}, 1000); 
+3

それは非同期定数または変数を定義するには奇妙だが、すぐにそれを使用しない...なぜあなたは、このようにそれをやろうとしていますか?あなたは何を達成しようとしていますか? – Xufox

+1

あなたが達成しようとしていることを尋ねるコメントには、グローバルな宣言を避けたいのですが、2番目の例のようにグローバルにしたいのですが? – Kaddath

+0

javascriptファイルがあるとき、私が持っているHTMLは 'レンダリングされていません'。明らかに、HTMLがロードされていない状態でスクリプトを動作させようとするとエラーが発生します。だから、私はタイムアウトを1秒間入れて宣言して、これを回避しようとしています。これは最高ではないかもしれませんが、うまくいきます。おそらく、HTMLが読み込まれた後にJSファイルを読み込むためのより良い方法がありますか? HTMLファイルをインクルードするためにw3-include-htmlを使用していることを追加する必要があります。 –

答えて

0

setTimeout(() => { 
 
    Object.defineProperty(window, "hourandminute", { 
 
     enumerable: false, 
 
     configurable: false, 
 
     writable: false, 
 
     value: new HourAndMinute() 
 
    }) 
 
}, 1000)

これは、あなたのニーズとは少し異なりますが、これが唯一の方法かもしれません。

0

私のコメントが気付かれなかった場合、これはあなたの要件を満たす可能性のあるパターンです:JS定数は再割り当てできませんが、値がオブジェクトのように変更可能であれば変更することができます例:

const hourandminute = {}; 
 

 
setTimeout(() => { 
 
    hourandminute.prop1 = 'FOO'; 
 
    hourandminute.prop2 = 'BAR'; 
 
}, 500); 
 

 
setTimeout(() => { 
 
    console.log(hourandminute); 
 
}, 1000);

関連する問題