第一篇文章。编程新手。
在Javascript中,当我声明一个新变量并设置这个新声明的变量来存储一个函数时,该函数是否在代码运行时立即执行(执行上下文)?
例如,
function Person() {
console.log(this);
this.firstname = 'John';
this.lastname = 'Doe';
}
var john = new Person();
变量john是否同时声明函数" Person"正在同一条线上执行?
答案 0 :(得分:1)
您复制/粘贴的内容是对象创建。这意味着john是一个新的Person对象。人是对象的类。 Person函数中的this
键工作与新创建的对象的实例相关。不要被function关键字滥用,这是一个令人困惑的(因为历史原因)JS关键字。 Person函数可以看作是一个对象构造函数。
编辑:删除了偏离主题的评论(非常偏离主题)
答案 1 :(得分:1)
var john = new Person();
john
。执行RHS。
2.1。 new运算符调用Person
的构造函数。每个函数都隐含constructor()
。这导致了对象的创建。
返回RHS评估结果(在这种情况下是一个对象)。
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()
。