JS中括号的重要性

时间:2018-02-07 15:33:52

标签: javascript

考虑以下代码:

var Student = /** @class */ (function () {
    function Student(firstName="ajith", middleInitial, lastName="k") {
        this.firstName = firstName;
        this.middleInitial = middleInitial;
        this.lastName = lastName;
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
    return Student;
}()); //1.Removing the outer parenthesis also works!!! help

function greeter(person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

var user = new Student;//2.here new Student() and new Student both work!!help
document.body.innerHTML = greeter(user);

为什么括号在这两条评论附近停止了?顺便说一下,上面的代码是由typescript编译器生成的。

3 个答案:

答案 0 :(得分:2)

在第一种情况下,不需要外括号,因为function关键字只能开始函数实例化表达式。只有使解析器理解您需要表达式而不是函数声明语句时才需要括号。

括号的常见用法是这样的陈述:

(function() {
  // do something
})();

如果没有初始(,解析器将把function关键字作为函数声明语句的开头,这意味着无法通过{{1}立即调用该函数}} 在末尾;函数声明语法不允许这样做。

第二种情况无关。通过()调用构造函数时,如果没有传递参数,则括号是可选的。

答案 1 :(得分:2)

如果你想传递参数,那么就使用它,如果没有 - 写一下,但还有一个区别:

new Date.getTime() // won't work.
new Date().getTime() // will work.
(new Date).getTime() // will work

答案 2 :(得分:1)

  • (function() {...}())定义了一个匿名函数并调用它。您可以删除外括号,因为function() {...}()仍然执行相同的操作。唯一不会起作用的地方是JavaScript是否需要一个语句(function关键字会期望一个函数声明,在此之后需要一个名字)。由于这是一个赋值,函数调用很好。
  • JavaScript允许您在某些上下文中调用不带括号的构造函数,因此new Foo()new Foo是相同的。
相关问题