1. ホーム
  2. javascript

[解決済み] 関数を呼び出すバックチック

2022-08-18 23:19:45

質問

うまく説明できないのですが

console.log`1`

グーグルクロームでは、次のような出力が得られます。

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

なぜバックティックはlog関数を呼び出しているのか、そしてなぜインデックスを raw: Array[1] ?

CatgocatによってJSルームで持ち上がった質問ですが、以下のような答え以外、意味を成しませんでした。 文字列をテンプレート化する のようなもので、なぜこのようなことが起こっているのかよくわかりませんでした。

どのように解決するのですか?

ES-6ではTagged Templateと呼ばれています。 ここで , funny 私はまさにチャットの星付きセクションでリンクを見つけました。

しかし、コードの関連する部分は以下のとおりです(基本的にフィルタリングされたソートを作成することができます)。

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に渡され、その配列を表示します。