返回表达式后定义函数的用法场景或优点是什么?

时间:2013-08-31 19:22:14

标签: javascript scope

En示例可以在Twitter'a typeahead.js here中找到:

function () {
    // ...
    return this.each(initialize);
    function initialize() {
        // ...
    }
}

问题:

  • 范围和功能是什么?
  • 使用这种结构的原因是什么(使用场景和优势)?

2 个答案:

答案 0 :(得分:1)

Javascript具有基于函数的范围,这意味着函数内定义的每个东西都可以从第一行获得,因为编译器“定义”了这个定义。

这适用于变量和函数定义 - 但是,变量值在赋值之后才可用。

<强> You can read all about javascript scoping and hoisting here

这意味着函数initialize可以从包装匿名函数的第一行获得。

除非您将代码结构视为优势,否则没有真正的理由,也没有优势,除非您将代码结构视为优势。

答案 1 :(得分:0)

我个人认为没有理由这样做。对我来说,即使它看起来有点奇怪。马丁是对的。您应该小心,因为定义的变量不像函数那样可访问。例如,这不起作用:

var getValue = function(func) {
    return func();
}
var f = function() {
    return getValue(now);
    var now = function() {
        return 10;
    }
}

alert(f());

然而,这有效:

var getValue = function(func) {
    return func();
}
var f = function() {
    return getValue(now);
    function now() {
        return 10;
    }
}

alert(f());