【问题标题】:Can't understand a JavaScript function return无法理解 JavaScript 函数返回
【发布时间】:2012-11-21 21:04:03
【问题描述】:

我是 JS 新手,遇到了几个新问题。比如我看到了这段代码:

function baz() {
    var x = 1;
    return {
        foo: function foo() {return ++x},
        bar: function foo() {return --x},
    };
}

var closures = baz();
alert(closures.foo(),closures.bar());

它应该显示一个共享变量。我的问题是 - 返回什么?

它只是一个具有两个函数 foo() 和 bar() 的对象吗? 谢谢

尤塔姆

【问题讨论】:

    标签: javascript function return


    【解决方案1】:

    是的,它“只是一个具有两个函数 foo() 和 bar() 的对象”。

    但是这个函数也是在closure中声明的,这意味着它可以拥有这个私有属性x其中

    • 两个函数都可见和修改
    • 否则无法读取或修改

    的主要区别
    var x = 1;
    var closures = {
        foo: function() {return ++x},
        bar: function() {return --x},
    };
    

    是这样的

    • x 受到创建对象的闭包的保护
    • x 不存在名称冲突,全局命名空间不混乱

    【讨论】:

      【解决方案2】:

      函数baz 返回一个具有两个属性(foobar)的对象。这两个属性的值是函数(它们都修改并返回相同x变量的值)。

      【讨论】:

        【解决方案3】:

        你甚至可以省略 foo() after 函数,因为这些属性将如您所见命名,并且这些函数也可以是匿名的,因此: return { var foo: function() {return ++x}, var bar: function() {return --x}, };

        所以你的对象的属性是函数。

        【讨论】:

          【解决方案4】:

          函数baz 将变量x 设置为1,然后创建返回一个对象。该对象有两个字段,一个是foo,另一个是bar。关于对象的一点快速的事情是,如果你想访问一个字段,你只需要调用object.fieldname。稍后我们会详细介绍。

          foobar 函数非常简单。如果您不确定 ++x 和 --x 在这里做什么,这是一个很好的 Stackoverflow 问题:

          Incrementing in C++ - When to use x++ or ++x?

          基本上它是说它将执行该语句,然后递增或递减 x。因为它返回 x 我相信它会返回 1,然后递增或递减 x。

          在函数的末尾定义了一个名为closures 的变量,这是从函数返回的对象。就像我之前说的,为了访问这些字段,你需要做的就是做object.fieldname,在这种情况下是closures.foo()closures.bar()(括号是运行函数所必需的)。

          我刚刚对其进行了测试,您的警报显示为 2。我相信原因是它不理解 alert(int,int) 的语法,因此它仅显示第一个警报。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-02-09
            • 1970-01-01
            • 2021-03-30
            • 1970-01-01
            • 1970-01-01
            • 2012-07-19
            • 1970-01-01
            相关资源
            最近更新 更多