为什么可以't我使用'var'在构造函数函数中

Why can't I use 'var' in constructor functions?

本文关键字:var 构造函数 函数 为什么      更新时间:2023-09-26

这很有效:

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时,它是否会将变量名添加到全局命名空间?

切线问题:它是否将变量名添加到全局命名空间中什么时候不使用var?

这似乎是你误解的根源。当您使用以下语法时:

function Question(questionTitle, answer0, answer1) {
  this.questionTitle = questionTitle;
  this.answer0 = answer0;
  this.answer1 = answer1;
}

该函数中的每一行代码都会在this指向的对象上添加或设置一个属性。只要this不指向全局对象,而是指向某个其他对象,那么"否",它就不会向全局命名空间添加名称。它为this指向的对象添加属性。一行代码,如:

  this.questionTitle = questionTitle;

指示Javascript获取CCD_ 7所指向的对象。将名为questionTitle的对象的属性设置为questionTitle变量的值。如果这样的属性还不存在,那么创建它并赋予它这个值。

所以,如果你像这样使用这个功能:

var q1 = new Question(...);

然后,构造函数中的这三行代码只为q1对象添加了三个属性它们对全局命名空间没有任何影响

这种语法并不是在您讨论的意义上创建新的变量。它在对象上创建新属性。在Javascript中,为对象分配属性时不使用var。您只需使用object.property = value语法分配属性,如果该属性不存在,则会为您创建它。


您的其他语法不能工作,因为它在Javascript中是非法语法。var之后的标识符必须遵循一组语法规则,其中一条规则是它不能包含句点,因此它只是非法语法。

即使第二个示例的语法在某种程度上是允许的,它也将创建仅在构造函数函数范围内可用的局部变量,并且无论如何都不会在对象上创建属性。

不能执行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';
}

不起作用。