• 阡陌
    2019-11-27
    虽然不知道"模版调用"在实际中有什么用处, 但根据结果来看, 似乎只有在"模版调用"时才能访问到模版字面量这个执行结构的类参数表结构, 作为函数调用的第一个参数.
    var c = 'ccc', x = 1;
    bar = (a1, a2, ...otherArgs) => console.log(a1, '-------', a2, '-----', otherArgs);
    bar`ass${c}edd${x}illll`;
    // ["ass", "edd", "illll", raw: Array(3)] "-------" "ccc" "-----" [1]

    作者回复: 是的。的确如此。而且除了“定制替换规则”之外,我也想不到有什么用处。

    这很类似于在string.replace()里面,你可以写成string.repalce('a', 'b')这样的一次替换,也可以写成string.replace(/a/g, function f() {})这样子,通过f()来定制替换的规则。

    js只是提供了这种便捷性给你,并且约定了在函数f()上的参数界面而已。

    
     2
  • 潇潇雨歇
    2019-11-26
    看过专栏后,我是这么理解的:模版也是可执行结构,有一个发现-引用的过程,有点类似参数表,但是最后具体表现为值。自然就可以调用,而不是特意去制造这么个语法。

    作者回复: 这个……这样讲,基本上也算没有什么问题。尤其是“最后具体表现为值”。

    不过模板的那个叫做“模板调用”的东西,更多的揭示了它内容的更多细节。建议你看看,分析一下。就是下面这样的代码:

    ```
    f = function() { ... }; // 声明函数
    f`aabbb${x}ccc`; // 模板调用:在函数后面直接使用模板
    ```

     4
     2
  • Astrogladiator-埃蒂...
    2019-11-26
    所以“1=1”是一个运行期错(ReferenceError),而不是语法错误(SyntaxError)。
    请问为什么我尝试运行1=1在chrome控制台和node环境都报的语法错?
    Uncaught SyntaxError: Invalid left-hand side in assignment

    作者回复: 这个很有可能是宿主程序的处理。我在Chrome控制台里也这么报错。不过在node.js里面却是ReferenceError。

    我用node v8.14和node v11.13都测试过。

    
     2
  • Elmer
    2019-12-27
    所以我们之前所说的引用都有可能是可执行结构。
    会按照场景求值,或者返回引用本身。
    可以这么理解么。

    作者回复: 这个倒不是。

    “引用(规范类型)”还真的只是数据类型,是数据,不是可执行结构,也不包含逻辑。

    “引用(规范类型)”在作为左手端和右手端的不同,是语言学层面的语义之一,是语言实现中的规范,不是一个“确定场景下的确实逻辑,或逻辑结构”。二者在讨论的并不是同一个层面的东西。

     2
    
  • 舒佳锦
    2019-12-02
    js的函数调用的参数是传名调用,而标签模板会先计算出结果再传递给函数。
    所以,模板调用是为了实现函数参数的传值调用?
     2
    
  • sprinty
    2019-11-25
    原来对 js 的理解真是太肤浅了,特殊可执行结构 的概念刷新了我对js 的认识。
    
    
我们在线,来聊聊吧