推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
jasonkayzk

在 Javascript 中不用括号也能调用函数?

  •  1
     
  •   jasonkayzk · Jun 4, 2021 · 5299 views
    This topic created in 1978 days ago, the information mentioned may be changed or developed.

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

    function log_this(string, param) {
        console.log(param);
    }
    
    (function (elem) {
        log_this`${elem}`;
    })('ok');
    

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

    log_this ${elem};

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

    22 replies  •  2021-06-06 10:16:02 +08:00
    qW7bo2FbzbC0
    qW7bo2FbzbC0
    Jun 4, 2021
    1
    关注,我也觉得好奇
    ubbcou
    ubbcou
    Jun 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'
    ```
    ubbcou
    ubbcou
    Jun 4, 2021
    3
    哎呦,我错了,跟原始字符串没关系。
    ubbcou
    ubbcou
    Jun 4, 2021
    5
    这段话是解释,你的代码中 log_this 替代了默认函数
    占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理。
    jasonkayzk
    jasonkayzk
    OP
    Jun 4, 2021
    6
    @ubbcou #5 可以的,学到了,哈哈;
    ubbcou
    ubbcou
    Jun 4, 2021
    7
    @jasonkayzk hh,标签函数
    yxcxx
    yxcxx
    Jun 4, 2021
    8
    ruby 里函数调用就可以不带括号
    ```ruby
    def hello name
    puts "hello #{name}!"
    end

    hello "world"
    ```
    jasonkayzk
    jasonkayzk
    OP
    Jun 4, 2021
    9
    @yxcxx #8 可能是我一般的 CRUD 写多了,不见括号,就想不到函数调用~
    AV1
    AV1
    Jun 4, 2021❤️2
    10
    可以看看这个项目,https://github.com/styled-components/styled-components,把 Tagged Templates 玩成这样。
    shadeofgod
    shadeofgod
    Jun 4, 2021
    11
    用 tagged template 写脚本,https://github.com/google/zx
    jasonkayzk
    jasonkayzk
    OP
    Jun 4, 2021
    12
    @DOLLOR #10
    @shadeofgod #11
    都玩出花了;😄
    BBCCBB
    BBCCBB
    Jun 4, 2021
    13
    学习了.
    y4ZIZrCL74b9MYl6
    y4ZIZrCL74b9MYl6
    Jun 4, 2021
    14
    厉害了,学习了
    lancelock
    lancelock
    Jun 4, 2021
    15
    js 里不清楚,不过现在很多语言里都有这种写法,dsl 很依赖这个特性
    JLVe
    JLVe
    Jun 4, 2021
    16
    新语法
    jasonkayzk
    jasonkayzk
    OP
    Jun 4, 2021
    17
    @JLVe #16 2015 年 ES6 中就有的噢!
    JLVe
    JLVe
    Jun 4, 2021
    18
    @jasonkayzk 脱离 babel 就不能投入生产环境用,所以还是新语法。
    jasonkayzk
    jasonkayzk
    OP
    Jun 4, 2021
    19
    @JLVe #18 在控制台试一下就知道了;
    shanex
    shanex
    Jun 4, 2021
    20
    不稀奇,貌似是 es6 新增的,jsx 之前参考过
    darknoll
    darknoll
    Jun 6, 2021
    22
    alert`test`
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1318 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 1946ms · UTC 20:06 · PVG 04:06 · LAX 12:06 · JFK 15:06
    ♥ Do have faith in what you're doing.