Javascript-函数在存储为变量时立即执行?
第一个帖子。编程新手 在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”的同时声明的吗?您复制/粘
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
已创建人员的构造函数。每个函数都隐含有一个构造函数()。这将导致对象创建
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是=
操作符的右侧表达式。