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

What are the usage scenarios or advantages of defining functions after the return expression

本文关键字:是什么 表达式 返回 之后 定义 函数      更新时间:2023-09-26

En示例可以在Twitter'atypeahead.js中找到:

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

问题:

  • 作用域是什么,什么函数看到什么
  • 使用这种构造的原因是什么(使用场景和优势)

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

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

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

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

这样做没有真正的理由,也没有任何优势,除非你把代码结构视为一种优势。

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

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());