JavaScript で関数を呼び出すバックティック (`…`) 質問する

JavaScript で関数を呼び出すバックティック (`…`) 質問する

どう説明したらいいのか分からないけど、走るとき

console.log`1`

Google Chromeでは、次のような出力が得られます

console.log`1`
VM12380:2 ["1", raw: Array[1]]

なぜバックティックが log 関数を呼び出し、 のインデックスを作成するのでしょうかraw: Array[1]?

CatgocatがJSルームで質問したが、何かについて以外に意味のある答えはなかった。テンプレート文字列それは、なぜこのようなことが起きているのかということにはまったく当てはまりませんでした。

ベストアンサー1

ES-6ではタグ付きテンプレートと呼ばれています。詳細についてはこちらをご覧ください。ここ面白いことに、そのチャットのスター付きセクションでリンクを見つけました。

ただし、コードの関連部分は次のとおりです (基本的にフィルターされた並べ替えを作成できます)。

function tag(strings, ...values) {
  assert(strings[0] === 'a');
  assert(strings[1] === 'b');
  assert(values[0] === 42);
  return 'whatever';
}
tag `a${ 42 }b`  // "whatever"

基本的には、他の関数と同様に、console.log 関数で「1」にタグを付けるだけです。タグ付け関数は、テンプレート文字列の解析された値と、さらにタスクを実行できる値を個別に受け入れます。

Babelは上記のコードを次のように変換します。

var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; };

console.log(_taggedTemplateLiteralLoose(["1"], ["1"]));

上記の例でわかるように、babel によってトランスパイルされた後、タグ付け関数 (console.log) には、次の es6->5 トランスパイルされたコードの戻り値が渡されます。

_taggedTemplateLiteralLoose( ["1"], ["1"] );

この関数の戻り値は console.log に渡され、配列が出力されます。

おすすめ記事