今天看代码突然发现了类似于下面的一段 js 代码,是可以正常输出的:
function log_this(string, param) {
console.log(param);
}
(function (elem) {
log_this`${elem}`;
})('ok');
我想问的是,代码里面的这个:
log_this ${elem};
为什么可以正常调用(新的 ES 语法?);原谅我的孤陋寡闻~
今天看代码突然发现了类似于下面的一段 js 代码,是可以正常输出的:
function log_this(string, param) {
console.log(param);
}
(function (elem) {
log_this`${elem}`;
})('ok');
我想问的是,代码里面的这个:
log_this ${elem};
为什么可以正常调用(新的 ES 语法?);原谅我的孤陋寡闻~
|
qW7bo2FbzbC0Jun 4, 2021
1
关注,我也觉得好奇
|
|
ubbcouJun 4, 2021
2
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals#%E5%8E%9F%E5%A7%8B%E5%AD%97%E7%AC%A6%E4%B8%B2
原始字符串 在标签函数的第一个参数中,存在一个特殊的属性 raw,我们可以通过它来访问模板字符串的原始字符串,而不经过特殊字符的替换。 ``` function tag(strings) { console.log(strings.raw[0]); } tag`string text line 1 \n string text line 2`; // logs "string text line 1 \n string text line 2" , // including the two characters '\' and 'n' ``` |
|
ubbcouJun 4, 2021
3
哎呦,我错了,跟原始字符串没关系。
|
|
4
|
|
ubbcouJun 4, 2021
5
这段话是解释,你的代码中 log_this 替代了默认函数
占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理。 |
|
6
@ubbcou #5 可以的,学到了,哈哈;
|
|
ubbcouJun 4, 2021
7
@jasonkayzk hh,标签函数
|
|
yxcxxJun 4, 2021
8
ruby 里函数调用就可以不带括号
```ruby def hello name puts "hello #{name}!" end hello "world" ``` |
|
9
@yxcxx #8 可能是我一般的 CRUD 写多了,不见括号,就想不到函数调用~
|
|
10
可以看看这个项目,https://github.com/styled-components/styled-components,把 Tagged Templates 玩成这样。
|
|
shadeofgodJun 4, 2021
11
用 tagged template 写脚本,https://github.com/google/zx
|
|
12
|
|
BBCCBBJun 4, 2021
13
学习了.
|
|
y4ZIZrCL74b9MYl6Jun 4, 2021
14
厉害了,学习了
|
|
lancelockJun 4, 2021
15
js 里不清楚,不过现在很多语言里都有这种写法,dsl 很依赖这个特性
|
|
JLVeJun 4, 2021
16
新语法
|
|
17
@JLVe #16 2015 年 ES6 中就有的噢!
|
|
JLVeJun 4, 2021
18
@jasonkayzk 脱离 babel 就不能投入生产环境用,所以还是新语法。
|
|
19
@JLVe #18 在控制台试一下就知道了;
|
|
shanexJun 4, 2021
20
不稀奇,貌似是 es6 新增的,jsx 之前参考过
|
|
cczengJun 5, 2021
21
|
|
darknollJun 6, 2021
22
alert`test`
|