标签: ecmascript-2015

为什么在使用模板字符串时可以在没有括号的情况下调用函数?

我有一个简单的日志功能:

function log(str) {
  console.log('logged: ', str);
}
Run Code Online (Sandbox Code Playgroud)

如果我在没有括号的情况下调用它(目前使用Chrome的开发工具)并传入模板字符串,如下所示:

log`foo`
Run Code Online (Sandbox Code Playgroud)

输出是: logged: ["foo", raw: Array[1]]

如果我用括号称呼它,

log(`foo`)
Run Code Online (Sandbox Code Playgroud)

输出是: logged: foo

为什么在Javascript中使用模板字符串调用函数没有括号?发生了什么导致结果与用括号调用结果不同?

javascript ecmascript-harmony ecmascript-6 template-strings ecmascript-2015

22
推荐指数
1
解决办法
2390
查看次数

在方法中的箭头函数内的箭头函数内使用`super`

我试图弄清楚我在Node v4.1.1(V8 v4.5.103.33)中看到的关于super和箭头函数的某些行为是否是指定行为,如果是这样(或者实际上,如果不是),哪里它说它应该(或不应该)在我所拥有的各种情况下工作的规范.

简言之:使用super箭头函数(inner)内的另一个箭头功能(outer)内的方法的工作,除非 outer有参数还是变量inner即使引用,inner引用参数或变量method.我想知道规范对此的说法:它是否应该一直有效,即使在V8失败的情况下?没有时间?只有在V8目前让它工作的特定情况下,而不是它不在哪里?

这是一个MCVE:

"use strict";

class Parent {
    show(msg) {
        console.log(`Parent#show: ${msg}`);
    }
}

class Child extends Parent {
    method(arg) {
        let outer = (x) => {
            console.log(`outer: x = ${x}`);
            let inner = () => {
                super.show(`arg = ${arg}, x = ${x}`);
            };
            inner();
        };
        outer(42);
    }
}

new Child().method("arg"); …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-2015

20
推荐指数
1
解决办法
1565
查看次数

为什么必须在ES2015中指定导出类型(let,var,const ...)?

因为我读这里,ES2015可以导出var,const,let,function,classdefault.

export var myVar1 = ...;
export let myVar2 = ...;
export const MY_CONST = ...;

export function myFunc() {
    ...
}
export function* myGeneratorFunc() {
    ...
}
export class MyClass {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么.在我的外行看来,应该有named exportsdefault exports.

您输出的类型似乎并不重要.我的意思是,当你export default,你指定类型?不,你没有,它的工作原理.此外,它还能有什么区别出口varlet?它有什么区别export const?导入模块时,无论如何它都是不可变的(AFAIK).

那么,为什么必须指定导出的类型?

javascript commonjs node-modules ecmascript-6 ecmascript-2015

5
推荐指数
2
解决办法
2598
查看次数