定义函数的区别:JavaScript

定义函数的区别:JavaScript,javascript,oop,javascript-objects,Javascript,Oop,Javascript Objects,JavaScript中提到的两个函数声明之间有什么区别吗 //Declaration 1 var foo = function(){ // code goes here } 及 当我试图使用foo的定义作为类来创建其他对象时 var newObj = new foo(); 声明2起作用了,但声明1不允许创建me,并且此类型的对象首先创建一个局部变量,该变量被分配一个函数。第二个声明创建一个函数。在第一种情况下,没有用于客户端的函数。这就是您无法创建对象的原因。: 您可以创建函数的对象。在此

JavaScript中提到的两个函数声明之间有什么区别吗

//Declaration 1
var foo = function(){

// code goes here
}

当我试图使用foo的定义作为类来创建其他对象时

var newObj = new foo();

声明2起作用了,但声明1不允许创建me,并且此类型的对象首先创建一个局部变量,该变量被分配一个函数。第二个声明创建一个函数。在第一种情况下,没有用于客户端的函数。这就是您无法创建对象的原因。


您可以创建函数的对象。在此例中,声明1认为FoO是一个变量,因此不能创建任何变量的对象,这就是为什么声明2工作且声明1不允许您。

< P>第一个创建匿名(无名)函数,并将其赋值给一个名为<代码> FoO 的变量。第二个声明了一个名为
foo
的函数。通常这两种形式可以互换使用,但仍存在一些差异。以下两个是我想到的主要区别。第一个可能是你所经历的:

吊装

在第二个示例中,完整的函数定义将被提升到当前范围的顶部。所以当你写作时:

var a = new A();
function A() {}
JavaScript将解释为:

function A(){}
var a;
a = new A();
…而且您的代码会很好地工作

然而,在第一个示例中,只有变量声明将被提升。功能体停留在它所在的位置。因此:

var a = new A();
var A = function(){};
将被解释为:

var a, A;
a = new A();
A = function(){};
这将导致错误,因为当您尝试创建实例时,
A
仍未定义

名称属性

正如我所说,第一个函数创建了一个匿名函数。这意味着,如果尝试访问该函数的
name
属性,它将返回一个空字符串:

var A = function(){};
console.log(A.name) //{empty string}
在第二个示例中,函数的实际名称为
A

function A(){}
console.log(A.name) //A
这是一个函数表达式:

  • 本例中的func表达式是匿名的,但被分配给一个var foo。 供参考
这是一个带标签的函数:

  • 没有什么好的理由对var.You做表达式 应该始终尝试为构造函数使用带标签的语句,因此 可以通过对象的构造函数识别对象的“类型”

  • 人们通常在需要提升的地方使用它 在定义前调用某个对象

    非常简单的示例

    foo(); // alerts 'hello'
    function foo() {alert('hello');}
    V/s 
    foo(); // throws an error since foo is undefined
    var foo = function() {alert('hello');}
    

是的,这是重复的,很抱歉问题标题不容易找到searchable@sij:我希望我的回答对你有帮助!!!当我尝试它们时,这两个版本都有效。
function A(){}
console.log(A.name) //A
//Declaration 1
var foo = function(){

// code goes here
}
//Declaration 2
function foo(){
 // same code here
 }
foo(); // alerts 'hello'
function foo() {alert('hello');}
V/s 
foo(); // throws an error since foo is undefined
var foo = function() {alert('hello');}