funct1:function与funct1函数的区别()

时间:2013-08-13 12:30:26

标签: javascript

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

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

上述内容之间有什么区别:

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

以上两种不同的写作方式是一样的吗?第一个看起来像是对我的转换声明。很抱歉,如果这个问题太简单了,但如果这只是语法问题,那么JavaScript书籍很少使用第一种语法;我在StackOverflow中提出这个问题的主要原因。

3 个答案:

答案 0 :(得分:2)

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

var someObject = {
    someProp: function () { 
        alert('foo'); 
    }
};

someObject.someProp(); // alerts "foo"

对于第二个你可能意味着function func1 ...,这是一个普通的旧函数声明。例如:

function someFunction() {
    alert('foo');
}

someFunction(); // alerts "foo"

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

答案 1 :(得分:1)

第二种形式是“普通”函数声明:该函数在您声明它的范围内可用。第一个表单用于对象文字:

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

只要可以访问myObject.func(),就可以将该函数调用为myObject。除了范围界定的这种差异外,函数的两个定义是等价的。

答案 2 :(得分:1)

还有一个非常重要的区别被称为“功能提升”(在ECMA方面含糊不清,但是用来描述行为的常用术语)。这与原始问题中的“第二条道路”直接相关,即 -

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

我们可以通过两种方式使用函数(再次使用wrt到第二种方式):

  1. 作为函数表达式 -

    var a = function(){

    }

  2. 作为函数声明

    函数a(){

    }

  3. 如您所知,所有变量,无论它们在声明的函数体中的哪个位置,都会得到 在幕后提升到功能的顶部。这同样适用于功能 因为它们只是分配给变量的对象。唯一的“问题”是使用时 一个函数声明,函数的定义也被提升,而不仅仅是它 声明。