Javascript funct1:函数与funct1函数()之间的差异

Javascript funct1:函数与funct1函数()之间的差异,javascript,Javascript,我经常在JavaScript中看到如下代码: func1: function() { return array1.pop(); } 上述内容与类似内容的区别是什么: function func1 (){ return array1.pop(); } 以上两种写作方式是否相同?第一个在我看来像一个switch语句。抱歉,如果这个问题太简单,但是JavaScript书籍很少使用第一个语法,如果这只是语法问题;我在StackOverflow中提出这个问题的主要

我经常在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 someFunction() {
    alert('foo');
}

someFunction(); // alerts "foo"
对于第二个,您可能指的是
函数func1…
,这是一个普通的旧函数声明。例如:

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

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

someFunction(); // alerts "foo"

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

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

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

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

someFunction(); // alerts "foo"
对于第二个,您可能指的是
函数func1…
,这是一个普通的旧函数声明。例如:

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

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

someFunction(); // alerts "foo"

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

第二种形式是“普通”函数声明:函数在声明它的范围内可用。第一种形式在对象文本中使用:

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

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

第二种形式是“普通”函数声明:函数在声明它的范围内可用。第一种形式在对象文本中使用:

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

只要可以访问
myObject
,就可以将该函数称为
myObject.func()
。除了在范围界定上的差异外,功能的两个定义是等效的。

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

function func1 (){
         return array1.pop();
}
有两种方法可以使用函数(同样是wrt到第二种方法):

  • 作为函数表达式-

    var a=函数(){

    }

  • 作为函数声明

    函数a(){

    }

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

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

    function func1 (){
             return array1.pop();
    }
    
    有两种方法可以使用函数(同样是wrt到第二种方法):

  • 作为函数表达式-

    var a=函数(){

    }

  • 作为函数声明

    函数a(){

    }

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

    底部的一个将给您一个语法错误…如果它在对象文本之外,第一个也将是错误,您是指
    =
    而不是
    ?或者你是在忽略周围的上下文,这很重要吗?很抱歉代码错误,我已经修复了它。@DaveNewton:我留下了周围的文本Dave。底部的文本会给你一个语法错误…如果它在对象文本之外,第一个文本也会是错误,你是指
    =
    而不是
    ?或者你是在省略周围的上下文,这很重要吗?很抱歉代码错误,我已经修复了它。@DaveNewton:我留下了周围的文本Dave。根据你的答案,在你的答案的第一个例子中,我可以这样写来表示同样的事情,对吧……someObject.someProp=function(){alert('foo');},这应该意味着同样的事情。我没有弄错吗?@Jack_of_All_Trades是的,这会将属性附加到对象上,你会以同样的方式调用它。根据你的回答,在你回答的第一个例子中,我可以写这样的东西来表示相同的东西,对吧……someObject.someProp=function(){alert('foo');},这应该意味着相同的东西。我没有弄错吗?@Jack\u of_All\u Trades是的,这会将属性附加到对象上,你会用同样的方式调用它。