这有效:
function Question(questionTitle, answer0, answer1) {
this.questionTitle = questionTitle;
this.answer0 = answer0;
this.answer1 = answer1;
}
但这不是:
function Question(questionTitle, answer0, answer1) {
var this.questionTitle = questionTitle;
var this.answer0 = answer0;
var this.answer1 = answer1;
}
它出现错误“Uncaught SyntaxError:Unexpected token this”。使用var
有什么问题?即使没有添加var
关键字,JavaScript也不会解释正在创建的新变量吗?
正切问题:当不使用var
时,是否将变量名称添加到全局命名空间?
答案 0 :(得分:2)
正切问题:它是否将变量名称添加到全局名称空间 什么时候不使用var?
这似乎是你误解的根源。使用此语法时:
function Question(questionTitle, answer0, answer1) {
this.questionTitle = questionTitle;
this.answer0 = answer0;
this.answer1 = answer1;
}
该函数中的每行代码都在this
指向的对象上添加或设置属性。只要this
没有指向全局对象,而是指向某个其他对象,然后" NO",它就不会向全局命名空间添加名称。它为this
指向的对象添加属性。一行代码如:
this.questionTitle = questionTitle;
指示Javascript获取this
指向的对象。将名为questionTitle
的对象上的属性设置为questionTitle
变量的值。如果这样的属性尚不存在,那么创建它并给它这个值。
所以,如果你像这样使用这个函数:
var q1 = new Question(...);
然后,构造函数中的这三行代码只向q1
对象添加了三个属性。 根本不会影响全局命名空间。
此语法不是在您正在讨论的意义上创建新变量。它在对象上创建新属性。在Javascript中,在为对象分配属性时不使用var
。您只需使用object.property = value
语法分配属性,如果该属性尚不存在,则会为您创建该属性。
您的其他语法不起作用仅仅因为它在Javascript中是非法的语法。 var
之后的标识符必须遵循一组语法规则,其中一个规则是它不能包含句点,因此它只是非法语法。
即使你的第二个例子的语法是以某种方式允许的,它也会创建只在构造函数范围内可用的局部变量,并且不会在你的对象上创建属性。
答案 1 :(得分:0)
你不能var this.foo = 'bar';
,因为它没有任何语法意义。
var
声明一个变量。
this
指的是直接范围内的调用对象。
例如,这个:
function someObject(){
// We are assigning `someObject` its own property `foo`.
this.foo = 'bar';
}
与此不同:
function someObject(){
// We are assigning some variable within the scope of this function named `foo`
var foo = 'bar';
}
所以希望你能看到这样做......
function someObject(){
// Illegal
var this.foo = 'bar';
}
......不会工作。