Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 构造函数和构造函数文本之间的区别_Javascript - Fatal编程技术网

Javascript 构造函数和构造函数文本之间的区别

Javascript 构造函数和构造函数文本之间的区别,javascript,Javascript,我正在读一本JavaScript书,这里的构造函数是这样创建的: var Person = function (living, age, gender) { this.living = living; this.age = age; this.gender = gender; this.getGender = function () { return this.gender; }; }; function Person (living, age, gender)

我正在读一本JavaScript书,这里的构造函数是这样创建的:

var Person = function (living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function () { return this.gender; };
};
function Person (living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function () { return this.gender; };
};
我在某个地方读到这样的东西:

var Person = function (living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function () { return this.gender; };
};
function Person (living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function () { return this.gender; };
};
我不知道这两者有什么区别。当我们创建实例时有什么区别吗?或者它们是相同的,只是创建对象构造函数的两种不同方式而已?

第一种是函数表达式,第二种是函数声明。顺便说一句,它不需要结尾的分号。这种区别与构造函数无关,但适用于普通函数

您可能知道,函数在javascript中是一流的值。这意味着函数可以分配给变量。所以,就像你可以给变量赋值一样,比如var pi=3.14,你可以给变量赋值函数,var add=function,b{return a+b}。这就是您的第一个声明所做的,它创建一个作为闭包实现的函数,然后将对它的引用存储在变量Person中。你可以把第二个看作是第一个的捷径

有关语法详细信息,请查看规范。

这是在运行时定义的:

这是在解析时定义的:

例如:

funA(); // does not work
funB(); // it works

var funA = function(){console.log("testA");}

function funB(){console.log("testB");}

funA(); // it works
funB(); // it works

其他支持my answer->

的StackOverflow引用都是类似的,您可以使用new Person从它们创建实例


唯一的区别是,在第一种情况下,它是一个表达式,因此在使用它之前必须对其进行定义,而在第二种情况下,由于您可以在文件中的任何位置使用该函数

函数表达式表示函数文字权利??请告诉我细节上的区别。@MarcadrejiaCarrini,好的。我已经用更多的细节补充了我的答案,所以请检查一下。在这两种情况下,一旦输入了封闭函数/脚本体,就将定义名称,定义完成。在一种情况下,值赋值将立即发生,而在另一种情况下,直到执行到达写入的行时才会发生。在这两种情况下,它都不是在解析时定义的。我不同意!我添加了一个示例,尝试执行它!函数funB{}它是在解析时定义的,这是指值赋值将立即发生,当解释器到达该行解析代码时发生!这是解析时间,这是一个定义步骤。如果不是解析器。。。那是谁?解释你自己!另外,var funA=函数{}是在解释器执行行运行时之前定义的。Javascript由一个多过程编译器在它实现的一个编译器过程中编译