2016-04-28 10 views
-1

コーディング時にvar宣言がありません。私にはpreset-0transform-runtimeがインストールされています。コンソールには、次のようなエラーが表示されます。Babelがグローバル変数をコンパイルしていません

key is not defined 

これは私が実行しているコードです:

let set = new WeakSet(); 
var key = {}; // added var 
set.add(key); 
console.log(set.has(key)); 
:私は varキーワードすべてがうまくている追加したときに

let set = new WeakSet(); 
key = {}; // missing var 
set.add(key); 
console.log(set.has(key)); 

しかし、

コンソール出力:

true 

つまり、私はbabelで自由にグローバル変数を作成できません。

答えて

3

そうではないようにはできません。

いつでも任意のファイルからwindow.MyKey = whateverValueに変数を割り当てて、この値をアプリ内の他のファイルからアクセスできます。しかし、それはあなたのアプリで世界的にデータを共有する最良の方法ではありません。最善のアプローチは、ファイルを作成することです

、MyFile.jsは

class MyFile { 
constructor() { 
    this.MyKey = 10; 
} 
} 

export default (new MyFile); 

今、あなたはどこでもあなたのアプリケーションでこのファイルを必要とし、MyFileのの同じインスタンスにアクセスすることができると言います。だから、

randomFile.js

import MyFile from './MyFile' 
MyFile.MyKey = 20; 

このアプローチは、グローバルスコープを汚染していますが、同じ機能を実現避けることができます。

+0

しかし、グローバルオブジェクトを意図したいのであれば、なぜバベルは拒否していますか? –

+0

グローバルオブジェクトは悪い習慣だからです。 –