考虑以下代码:
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编译器生成的。
答案 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
关键字会期望一个函数声明,在此之后需要一个名字)。由于这是一个赋值,函数调用很好。new Foo()
和new Foo
是相同的。