0

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

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

问题:

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

2 回答 2

1

Javascript 具有基于函数的作用域,这意味着在函数中定义的每一件事都可以从第一行获得,因为定义是由编译器“提升”的。

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

您可以在此处阅读有关 javascript 作用域和提升的所有信息

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

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

于 2013-08-31T19:25:14.897 回答
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());
于 2013-08-31T19:37:57.910 回答