定义函数的区别:JavaScript

difference in defining functions : JavaScript

本文关键字:JavaScript 区别 函数 定义      更新时间:2023-09-26

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

//Declaration 1
var foo = function(){
// code goes here
}

//Declaration 2
function foo(){
 // same code here
 }

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

var newObj = new foo();

声明2有效,但宣言1不允许我创建此类型的

对象

这是一个函数表达式:

//Declaration 1
var foo = function(){
// code goes here
}
  • 在这种情况下,func表达式是匿名的,但分配给了var foo。供参考

这是一个标记函数:

//Declaration 2
function foo(){
 // same code here
 }
  • 对var进行表达并没有什么好的理由应该始终尝试为构造函数使用带标签的语句,因此可以通过对象的构造函数来标识对象的"类型"。

  • 人们大多在需要吊装的地方使用这个吊装只是指在定义某个东西之前调用它

    非常简单的例子

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

首先创建一个局部变量,该变量被分配了一个函数。第二个声明创建了一个功能。在第一种情况下,并没有可用于客户端的函数。这就是为什么不能创建对象。

检查这个小提琴。它允许两种声明:

//Declaration 1
var foo1 = function(){
alert('Declaration 1');
}
//Declaration 2
function foo(){
 alert('Declaration 2');
 }
var b= new foo1();
var a=new foo();

您可以创建函数的对象。在您的案例中,声明1认为foo是一个变量,因此您不能创建任何变量的对象,这就是为什么声明2有效而声明1不允许您这样做的原因。

第一个函数创建一个匿名(无名称)函数,并将其分配给一个名为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