技术解析

在 Javascript 中不用括号也能调用函数?
0
2021-08-09 19:55:48
idczone

今天看代码突然发现了类似于下面的一段 js 代码,是可以正常输出的:

function log_this(string, param) {
    console.log(param);
}

(function (elem) {
    log_this`${elem}`;
})('ok');

我想问的是,代码里面的这个:

log_this ${elem};

为什么可以正常调用(新的 ES 语法?);原谅我的孤陋寡闻~


关注,我也觉得好奇

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals/>在标签函数的第一个参数中,存在一个特殊的属性 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'
```

哎呦,我错了,跟原始字符串没关系。

不不不,再往下一点有答案了,“带标签的模板字符串”
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals#%E5%B8%A6%E6%A0%87%E7%AD%BE%E7%9A%84%E6%A8%A1%E6%9D%BF%E5%AD%97%E7%AC%A6%E4%B8%B2

这段话是解释,你的代码中 log_this 替代了默认函数
占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理。

可以的,学到了,哈哈;

hh,标签函数

ruby 里函数调用就可以不带括号
```ruby
def hello name
puts "hello />end
hello "world"
```

可能是我一般的 CRUD 写多了,不见括号,就想不到函数调用~

可以看看这个项目,https://github.com/styled-components/styled-components,把 Tagged Templates 玩成这样。

用 tagged template 写脚本,https://github.com/google/zx



都玩出花了;
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服