Javascript - 存储为变量时立即执行的功能?

时间:2015-09-25 07:03:34

标签: javascript function variables execution

第一篇文章。编程新手。

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

例如,

function Person() {

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

}

var john = new Person();

变量john是否同时声明函数" Person"正在同一条线上执行?

4 个答案:

答案 0 :(得分:1)

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

编辑:删除了偏离主题的评论(非常偏离主题)

答案 1 :(得分:1)

var john = new Person();
  1. 已创建变量john
  2. 执行RHS。

    2.1。 new运算符调用Person的构造函数。每个函数都隐含constructor()。这导致了对象的创建。

  3. 返回RHS评估结果(在这种情况下是一个对象)。

  4. 结果被分配给john或换句话说,现在john(引用变量)将引用由于Person()上执行的新运算符而创建的对象。

答案 2 :(得分:0)

在Javascript中,变量定义是“悬挂的”。这意味着您发布的代码和以下代码......

var john;
function Person() {
    console.log(this);
    this.firstname = 'John';
    this.lastname = 'Doe';
}
john = new Person();

...是相同的,因为编译器会将变量声明提升到当前上下文的开头。所以,答案是否定的,声明变量,然后将函数作为构造函数执行,然后将新的creadted对象分配给该变量。

您可以找到更多信息here

答案 3 :(得分:0)

如果你在一个函数之后放 function GetCalendarDateRange() { var calendar = $('#calendar').fullCalendar('getCalendar'); var view = calendar.view; var start = view.start._d; var end = view.end._d; var dates = { start: start, end: end }; return dates; } ()(某些函数接受参数,有些函数没有参数),这意味着它是一个函数 call ,它将是执行。如果要将函数本身分配给变量,则需要省略(optionalArgumentsHere)。这是可能的,因为函数是JavaScript中的对象(在每种语言中都不是这样)。

所以这里发生的是你声明一个变量(你实际上是因为提升而早先声明它,正如Pablo所解释的那样),你执行()并将结果赋给变量。

如果您调用了某些功能,如

new Person()

您将把函数的返回值赋给变量。但是你的情况很特殊,因为你使用的是function fun() { return 5; } var x = fun(); 。这意味着new构造函数,它用于创建类型为Person的新对象。在该构造函数中,您使用Person关键字将属性附加到新创建的对象。 this调用返回对象,即使未明确调用new Person()