Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backticks调用函数_Javascript_Ecmascript 6_Template Strings_Template Literals_Tagged Templates - Fatal编程技术网

Javascript Backticks调用函数

Javascript Backticks调用函数,javascript,ecmascript-6,template-strings,template-literals,tagged-templates,Javascript,Ecmascript 6,Template Strings,Template Literals,Tagged Templates,我不知道该怎么解释,但当我跑的时候 console.log`1` 在google chrome中,我得到的输出如下 console.log`1` VM12380:2 ["1", raw: Array[1]] 为什么backtick调用log函数,为什么它要为raw:Array[1]创建索引 Catgocat在JS室中提出了一个问题,但除了一些不符合实际情况的问题外,没有任何答案是有意义的。在ES-6中它被称为标记模板。更多关于它们的信息可以阅读,有趣的是,我在聊天的星号部分找到了链接 但是代

我不知道该怎么解释,但当我跑的时候

console.log`1`
在google chrome中,我得到的输出如下

console.log`1`
VM12380:2 ["1", raw: Array[1]]
为什么backtick调用log函数,为什么它要为
raw:Array[1]
创建索引


Catgocat在JS室中提出了一个问题,但除了一些不符合实际情况的问题外,没有任何答案是有意义的。

在ES-6中它被称为标记模板。更多关于它们的信息可以阅读,有趣的是,我在聊天的星号部分找到了链接

但是代码的相关部分如下(您基本上可以创建一个过滤排序)

基本上,它只是用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,然后它将打印数组。

标记的模板文字: 以下语法:

function`your template ${foo}`;
称为标记的模板文本。


被称为标记模板文字的函数通过以下方式接收其参数:

函数taggedTemplate(字符串、arg1、arg2、arg3、arg4){
console.log(字符串);
日志(arg1、arg2、arg3、arg4);
}

taggedTemplate`a${1}b${2}c${3}`
晚会迟到了,但是,TBH,没有一个答案能够解释50%的原始问题(“为什么
原始:数组[1]
”)

1.为什么可以使用反勾号调用不带括号的函数? 正如其他人所指出的,这被称为(更多细节也被称为)

使用此语法,函数将接收以下参数:

  • 第一个参数:一个数组,包含字符串中非表达式的不同部分
  • 其余参数:被插值的每个值(即表达式)
基本上,以下各项“几乎”等同于

// Tagged Template
fn`My uncle ${uncleName} is ${uncleAge} years old!`
(参见第2点,了解它们为何不完全相同)

2.为什么
[“1”,原始:数组[1]]
??? 作为第一个参数传递的数组包含一个属性
raw
,该属性允许输入它们(不处理转义序列)

示例用例:

let fileName = "asdf";

fn`In the folder C:\Documents\Foo, create a new file ${fileName}`

function fn(a, ...rest) {
  console.log(a); //In the folder C:DocumentsFoo, create a new file
  console.log(a.raw); //In the folder C:\Documents\Foo, create a new file 
}
什么,一个具有属性的数组

是的,因为JavaScript数组实际上是对象,所以它们可以

例如:

const arr = [1, 2, 3];
arr.property = "value";
console.log(arr); //[1, 2, 3, property: "value"]


相关:,我发现这是一个更容易理解的解释-
// function call
fn(["My uncle ", " is ", " years old!"], uncleName, uncleAge);
let fileName = "asdf";

fn`In the folder C:\Documents\Foo, create a new file ${fileName}`

function fn(a, ...rest) {
  console.log(a); //In the folder C:DocumentsFoo, create a new file
  console.log(a.raw); //In the folder C:\Documents\Foo, create a new file 
}
const arr = [1, 2, 3];
arr.property = "value";
console.log(arr); //[1, 2, 3, property: "value"]