【问题标题】:JavaScript function different syntax? [duplicate]JavaScript函数不同的语法? [复制]
【发布时间】:2012-02-28 08:43:52
【问题描述】:

可能重复: What is the difference between a function expression vs declaration in JavaScript? This JavaScript syntax I haven't seen till now, what does it do really?

以下两种写函数的方式有什么区别?我已经看到两者都使用过,但我不确定哪一个是“正确的”。

function init() {

}


init: function() {

},

第二种写法有什么好处?

【问题讨论】:

  • 此外。第二个在这种情况下甚至在语法上都无效。
  • @Tomalak:不,您的链接问题中没有讨论对象文字函数语法。根本不是重复的。
  • @Platinum:第二个是函数表达式。 (这里缺少的)对象字面量不会使它成为其他任何东西。

标签: javascript function syntax


【解决方案1】:

函数声明

function init() {

}

函数表达式

var init = function() {

};

主要区别在于 JavaScript 中的 Variable Hoisting。您可以在此处阅读更多内容:http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoistinghttp://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

通过您的示例,我相信您也有兴趣在object literals 中定义anonymous functions。这是一个例子:

//obj is the object name
var obj = {
    //init is the property name or key and the anonymous function is the value
    init: function() {
    },
    anotherProp: 'some value'
};

这样使用:

obj.init();
alert(obj.anotherPorp);

在对象字面量中,对象的不同属性使用key: value 语法定义,并使用逗号分隔。

我建议您阅读这个关于 JavaScript http://learn.appendto.com/lessons 的免费系列,它会为您解答很多此类问题,并为您成为 JS 开发人员打下坚实的基础。

【讨论】:

    【解决方案2】:

    第二个只能用在对象字面量的上下文中:

    var myNamespace = {
        func1: function () {
            // do something
        },
    
        func2: function () {
            // do something else
        },
    
        someValue = 5
    };
    

    第一种形式作为语句执行。相当于:

    var init = function () {
        // do something
    };
    

    【讨论】:

      【解决方案3】:

      第一个示例在全局范围内定义了一个可以用init() 调用的函数。第二个定义了一个名为init 的对象的属性,它是右侧的函数声明。

      通常,第二个示例提供了一个较小的范围,您可以在其中执行该函数。

      第一个示例允许您像这样调用函数:

      init();

      第二个,更可能是这样的:

      var thing = function() {
          init: function() { }
      };
      
      thing.init();
      

      【讨论】:

        【解决方案4】:

        尝试始终使用:

        init: function (){
        
        }
        

        在编写对象字面量时。

        当您尝试处理全局函数时,请将其设置为 var,因此:

        var init = function(){
        
        }
        

        请记住,每个都有它的位置,但我个人喜欢为我正在处理的项目编写命名空间并使用对象文字。

        现在,一旦设置了对象,这两者都将仅在对象中可用。另一个方法有点草率,现在用的比较少,但是不管操作顺序如何都可以调用,所以可以在代码中设置之前或之后调用......再次,这在很多情况下被放弃了.

        function init(){
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-08-26
          • 2012-03-14
          • 2014-11-26
          • 1970-01-01
          • 2020-06-01
          • 2020-12-14
          • 1970-01-01
          相关资源
          最近更新 更多