funct1之间的区别:函数与funct1函数()



我经常在JavaScript中看到如下代码:

func1: function() {
      return array1.pop();
    }

上面的和下面的区别是什么:

function func1 (){
         return array1.pop();
}

以上两个是同一件事,但写作方式不同吗?第一个在我看来像是一个switch语句。如果这个问题太简单,很抱歉,但JavaScript书籍很少使用第一个语法,如果这只是语法问题的话;我在StackOverflow中提出这个问题的主要原因。

第一个是在对象文字上创建一个属性。属性名称为func1,属性值为匿名函数。例如:

var someObject = {
    someProp: function () { 
        alert('foo'); 
    }
};
someObject.someProp(); // alerts "foo"

对于第二个,您可能指的是function func1 ...,它是一个简单的旧函数声明。例如:

function someFunction() {
    alert('foo');
}
someFunction(); // alerts "foo"

大多数人使用对象文字作为将逻辑功能分组在一起的一种方式,类似于其他语言中的名称空间。通过将函数定义为其他变量的属性,可以减少全局命名空间中的变量数量,使代码更有组织性。

第二种形式是"正常"函数声明:函数在您声明它的范围内可用。第一种形式在对象文字中使用:

var myObject = {
    func: function() {
        return array1.pop();
    },
    name: 'John Smith'
};

只要myObject可访问,就可以将函数调用为myObject.func()。除了作用域上的差异之外,函数的两个定义是等效的。

还有一个非常重要的区别被称为"功能提升"(在ECMA方面很模糊,但这是描述行为的常用术语)。。这与原问题中的"第二条路"——直接相关

function func1 (){
         return array1.pop();
}

有两种方法可以使用函数(再次参考第二种方法):

  1. 作为函数表达式-

    var a=函数(){

    }

  2. 作为功能声明

    函数a(){

    }

正如您所知,所有变量,无论它们在函数体的何处声明,都会得到被吊到幕后活动的顶部。同样适用于函数因为它们只是分配给变量的对象。唯一的"明白"是当使用一个函数声明,函数的定义也会被挂起,不仅它公告

最新更新