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"]