Javascript-函数在存储为变量时立即执行?

Javascript-函数在存储为变量时立即执行?,javascript,function,variables,execution,Javascript,Function,Variables,Execution,第一个帖子。编程新手 在Javascript中,当我声明一个新变量并将这个新声明的变量设置为存储一个函数时,当代码运行时,该函数是否立即执行(执行上下文) 比如说, function Person() { console.log(this); this.firstname = 'John'; this.lastname = 'Doe'; } var john = new Person(); 变量john是在同一行上执行函数“Person”的同时声明的吗?您复制/粘

第一个帖子。编程新手

在Javascript中,当我声明一个新变量并将这个新声明的变量设置为存储一个函数时,当代码运行时,该函数是否立即执行(执行上下文)

比如说,

function Person() {

    console.log(this);
    this.firstname = 'John';
    this.lastname = 'Doe';

}

var john = new Person();

变量john是在同一行上执行函数“Person”的同时声明的吗?

您复制/粘贴的是对象创建。这意味着约翰是一个新人。作为对象类的人。Person函数中的
键与新创建对象的实例相关。不要被function关键字滥用,它是一个令人困惑的(由于历史原因)JS关键字。Person函数可以看作是一个对象构造函数


编辑:删除了离题备注(离题太多)

在Javascript中,变量定义被“提升”。这意味着你发布的代码和下面的代码

var john;
function Person() {
    console.log(this);
    this.firstname = 'John';
    this.lastname = 'Doe';
}
john = new Person();
。。。相同,因为编译器将把变量声明提升到当前上下文的开头。因此,答案是否定的,声明变量,然后将函数作为构造函数执行,然后将新的creadted对象分配给该变量

如果将
()
(可选参数设置)
(有些函数接受参数,有些函数不接受参数)放在函数后,可以找到更多信息,这意味着它是一个函数调用,并且将被执行。如果要将函数本身分配给变量,则需要省略
()
。这是可能的,因为函数是JavaScript中的对象(并非所有语言都是这样)

因此,这里发生的事情是,您声明了一个变量(实际上,正如Pablo所解释的,您是因为吊装而提前声明的),执行
newPerson()
,并将结果分配给变量

如果你调用了一些函数,比如

function fun() {
    return 5;
}

var x = fun();
将函数的返回值赋给变量。但是您的案例是特殊的,因为您使用了
new
。这意味着
Person
是一个构造函数,用于创建
Person
类型的新对象。在该构造函数中,使用
this
关键字将属性附加到新创建的对象。
newperson()
调用返回对象,即使没有显式调用
return

var john = new Person();
  • 变量
    john
    已创建
  • RHS被执行

    2.1。新操作员调用
    人员的构造函数。每个函数都隐含有一个
    构造函数()。这将导致对象创建

  • 返回RHS求值结果(在本例中为对象)

  • Result被分配给john,或者换句话说,现在john(一个引用变量)将引用作为在
    Person()上执行新操作符的结果而创建的对象

  • 使用关键字
    new
    创建一个新对象,可以使用变量
    john
    引用该对象。删除
    new
    并将调用
    Person
    的结果存储在
    john
    中。就这么简单。W3schools为初学者提供了一个很好的教程。在执行任何代码之前都会处理变量声明,因此在任何代码运行之前都会创建john并为其赋值undefined。类似地,函数声明也是在执行之前处理的,所以Person在执行开始之前也存在。当执行运行时,会为john分配右侧表达式的返回值,该表达式是Person的实例。@Rinzler请显示在何处,并解释如何创建执行上下文和建立环境记录。我不认为OP会在那里学到这一点。为什么要投否决票?这个问题可能看起来很幼稚,但却很清楚written@RobG我说:Allah Akbar为初学者提供了一个很好的教程,我没有说任何其他内容。补充一点:如果您看到
    newsomefunction()
    the
    ()
    表示该函数在特定时刻执行,
    new
    表示它将创建该函数的新实例,而不是使用
    return
    值。这不是对他的问题的回答。问题是在执行构造函数时是否声明了变量。我的回答显示变量是在之前声明的。无论如何,我已经编辑了它以使其更清晰。这是javascript的新手,什么是RHS?@StephanBijzitter RHS是
    =
    操作符的右侧表达式。