、;`

2016-05-14 1 views
1

cssnanoのソースコードを見ると、私はこのラインに出くわした、;`

var proc = (0, _postcss2.default)();私がテストしたものから

、それは

var proc = _postcss2.default();

と同じことをやっているようだなぜcssnano最初の構文を使用してprocを割り当てたのですか?

+0

どちらの行も同じことをします。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Comma_Operatorを参照してください。なぜcssnanoが最初のやり方をしたのか、私は言うことができませんでした。 – nnnnnn

+2

@nnnnnnまあ、私は答えを書くでしょう。 –

+0

@ AlexanderO'Mara - OK、それは関数内の 'this 'の値を変更することになります - それはあなたの意味ですか?私はあなたの答えを待っていると思います... – nnnnnn

答えて

4

thisの値がdefaultの2つの異なる呼び出しに基づいて異なるという点で、わずかな違いがあります。以下のコードを検討:

var _postcss2 = { 
 
    default: function() { 
 
     return this; 
 
    } 
 
}; 
 

 
var proc = (0, _postcss2.default)(); 
 
console.log(proc); // proc === window (or undefined in strict mode) 
 

 
var proc = _postcss2.default(); 
 
console.log(proc); // proc === _postcss2

_postcss2.default()_postcss2オブジェクトのメソッドとしてdefaultを呼び出し、それに応じてthisを設定するが、(0, _postcss2.default)();ない、とthis非厳密モードでwindowなり、 strictモードではundefinedです。

the comma operatorの方法では、すべての式が実行されますが、最後の式だけが返されるため、0,は、カンマ演算子を使用して関数参照自体を変数に設定せずに取得する短い無意味な式です最初。

このようなケースで違いがある場合は、コード自体を見ずには言えません。

このコードのcorresponding line from the source codeは、let proc = postcss();であり、postcssはES6インポートです。この特定のコードは、おそらくBabelというES6トランスパイラーによって生成されています。

+1

良い答えですが、なぜそれが呼び出されることを意図していない場合に 'default'メソッドが' this'を使うのかという疑問が生じます。 – Barmar

+0

カンマ演算子の機能や、関数呼び出し時に変更される理由について何かを追加したい場合があります。 – nnnnnn

+0

@Barmarええ、私が考えることができるのは、 'typeof'のないブラウザとNodeの両方で、グローバルな' this 'にアクセスするための奇抜な方法です。私がやることではないが、私はすべてを厳密なモードに置く。 –