2016-10-01 13 views
2

私はes6でこれをブロックスコープにする方法を知っています。ES6のブロックスコープはバベルでコンパイルされています

'use strict'; 

{ 
    let account = [1678922, 300450]; 

    let compute = (credit, debit) => { 
     return credit - debit; 
    } 

    console.log(compute(...account)); 
} 

私がコンパイルされたバージョンでグローバル変数を削除したいES5 [これは私が期待するものである]

(function(){ 
    var account = [1678922, 300450]; 

    var compute = function compute(credit, debit) { 
     return credit - debit; 
    }; 

    console.log(compute.apply(undefined, account)); 
})(); 

console.log(user1); 

'use strict'; 

{ 
    var account = [1678922, 300450]; 

    var compute = function compute(credit, debit) { 
     return credit - debit; 
    }; 

    console.log(compute.apply(undefined, account)); 
} 

をコンパイルBABEL。

質問:

  1. 任意のプラグインなしでそれを行うにはどのような方法がありますか?
  2. いいえ、npmを使用しているプラ​​グインはありますか?

PS:古代のブラウザをサポートする必要があります。少なくともIE9。

ご協力いただければ幸いです。ありがとう!

+0

'use strict'を追加します。あなたの上のスクリプトですか? – Mox

+1

あなたはこれにいくつかの文脈を与えることができますか?私はこれについて多くの方法を考えることができます:あなたが使用している関数にスコープし、それを格納するためにオブジェクトリテラルを使用します。しかし、それは本当にあなたがそれを必要とする理由、 – thesublimeobject

+0

@ thesublimeobject、私は与えられた文脈がはっきりしていると信じています。ブロックスコープが意図したとおりに動作しない理由 – Mox

答えて

0

バベル編集の例。コメントの続き:

EDIT:

{ 
    let account = [1678922, 300450]; 

    let compute = (credit, debit) => { 
     return credit - debit; 
    } 

    console.log(compute(...account)); 
} 

{ 
    let account = [16789, 3004]; 

    let compute = (credit, debit) => { 
     return credit - debit; 
    } 

    console.log(compute(...account)); 
} 

Postcompiled:あなたの例

プリコンパイル済みに基づく本質的には

{ 
    var account = [1678922, 300450]; 

    var compute = function compute(credit, debit) { 
     return credit - debit; 
    }; 

    console.log(compute.apply(undefined, account)); 
} 

{ 
    var _account = [16789, 3004]; 

    var _compute = function _compute(credit, debit) { 
     return credit - debit; 
    }; 

    console.log(_compute.apply(undefined, _account)); 
} 

、それは問題ではありません。バベルはそれを本当に重要ではない方法でインテリジェントに編集しています。

+0

いいえ私の例をbabeljs.ioに入れてみてください。なぜあなたは別の結果を得るのか分かりません。私はcliを使用しています。もう一つ、それは他のスクリプトでアクセス可能になります。コンソールにアカウントまたは_accountを入力するだけでよい場合を想像してください。 –

+0

わかりません。私はbabel-loader経由でwebpackでコンパイルを使用しています。出力するモジュールスコープが与えられていれば、ファイル自体が関数を介してエクスポートされ、webpackによって要求され、呼び出されるので、これらの変数はグローバルスコープで使用できません。私はそれがWebpackの特定のものかもしれないと思うが、彼らは私には関数ラッパーを与えられたグローバルスコープにアクセスすることはできません。 – thesublimeobject

+0

上記のように、babeljs.ioのウェブサイトでは使用できないモジュールバンドラを使用していない場合は、グローバルになります。最近誰もがバンドルを使用しているので、それは問題ではありません。 – loganfsmyth

関連する問題