这些声明(在JavaScript中)有什么区别?

时间:2010-04-27 05:02:46

标签: javascript

  

可能重复:
  Javascript: var functionName = function() {} vs function functionName() {}

在Javascript中我可以写:

function TheFunc(arg) {
   ...
}

TheFunc = function(arg) {
   ...
}

TheFunc : function(arg) {
   ...
}

真正的区别是什么?我何时应该使用哪种?

1 个答案:

答案 0 :(得分:0)

未提及的第一和第二语法之间的一个区别(不在链接的问题中)是如果函数返回一个函数对象,使用'TheFunc'的结果将是完全不同的

TheFunc = function(arg) {
  return function(x) {
    return arg+x;
  }
}(5);
res = TheFunc(2); // res == 7

使其等同于

TheFunc = function(5) {
  return function(x) {
    return 5+x;
  }
}
res = TheFunc(2); // res == 7

因为该功能是匿名的。而

function TheFunc(arg) {
  return function(x) {
    return arg+x;
  }
}

byFive = TheFunc(5);
res = byFive(2); // res == 7

会有相同的结果,但可以使函数工厂重复使用。

实际用途在这些示例中并不是那么清楚,但是它可以是必不可少的,例如,在基于回调的调用构建复杂的钩子系统的情况下 - 例如带有插件的系统:

// state object
function state(args) {
  this.parse = function(data){
    data = this.pre_parser(data);

    // go on transforming data

    return data;
  }
}
state.prototype.pre_parser_factory = function(options){
  ...
}

var st = new state(args);
async_call( function(data, options){
              st.pre_parser = st.pre_parser_factory(options);
              res = st.parse(data);
            })