无法理解JavaScript函数的返回

时间:2012-12-04 09:18:13

标签: javascript function return

我是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()的对象吗? 感谢

Yotam

4 个答案:

答案 0 :(得分:4)

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

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

  • 是可见的,并且可以通过两种功能进行修改
  • 无法以其他方式阅读或修改

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

就是那个

  • x受创建对象的闭包的保护
  • 关于x可能没有名称冲突,并且全局命名空间不会混乱

答案 1 :(得分:3)

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

答案 2 :(得分:1)

Yo甚至可以省略foo()之后的函数,因为这些属性将按照您的名字命名,并且这些函数也可以是匿名的,因此: return { var foo: function() {return ++x}, var bar: function() {return --x}, };

所以你有一个属性为对象的对象。

答案 3 :(得分:0)

函数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)的语法,所以它只显示第一个警报。