Backtick chiamando una funzione

Non sono sicuro di come spiegarlo, ma quando corro

console.log`1` 

In google chrome, ottengo risultati simili

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

Perché il backtick chiama la funzione di registro e perché sta creando un indice di raw: Array[1] ?

Domanda sollevata nella stanza JS da Catgocat, ma nessuna risposta aveva un senso oltre a qualcosa riguardo ai modelli di stringhe che non si adattavano perfettamente al motivo per cui ciò stava accadendo.

    Si chiama Tagged Template String in ES-6 più potrebbe essere letto su di loro Qui , divertente ho trovato il link nella sezione speciale della chat.

    Ma la parte rilevante del codice è sotto (puoi praticamente creare un ordinamento di filtri).

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

    Fondamentalmente sta semplicemente taggando il “1” con la funzione console.log, come farebbe con qualsiasi altra funzione. Le funzioni di codifica accettano valori analizzati delle stringhe di template e i valori separatamente su cui possono essere eseguite ulteriori attività.

    Babel traspone il codice sopra a

     var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; }; console.log(_taggedTemplateLiteralLoose(["1"], ["1"])); 

    Come puoi vedere nell’esempio sopra, dopo essere stato transpiled da babel, la funzione di tagging (console.log) viene passata il valore di ritorno del seguente codice transesciato es6-> 5.

    _taggedTemplateLiteralLoose ([“1”], [“1”]);

    Il valore di ritorno di questa funzione viene passato a console.log che stamperà quindi la matrice.