私はこのjavascriptスニペットに頭を包み込もうとしています:
(_=[].concat)()[0]
ウィンドウを返しますが、なぜですか?
コンポーネントに分解すると、何が起こっているのかを理解しやすくなります。
基本的に、このスニペットは次のように書き換えることができます。
Array.prototype.concat.call(this)[0]
関数を呼び出すと、this
の前にオブジェクトからコンテキストが取得さ.
れるため、関数呼び出しの参照は に設定されます。ただし、関数に含まれるオブジェクトがない場合、そのコンテキストはデフォルトでグローバル スコープになります。これは、ブラウザーを意味します。通常、連結先のベース配列として使用するために呼び出される既存の配列コンテキストを使用しますが、この場合はコンテキストであるため、配列にキャストされてから concat が適用されますが、何も提供されていないため連結するには、ウィンドウであるコンテキストを含む配列を返すだけです。object.toString()
this
object
window
concat
window