Can';我不理解JavaScript函数返回

Can';我不理解JavaScript函数返回,javascript,function,return,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()); 它应该显示一个共享变量。我的问题是——返回的

我是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

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

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

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

  • 两个功能都可以看到和修改
  • 否则无法读取或修改

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

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

Yo甚至可以省略
foo()
after函数,因为这些属性将按您看到的那样命名,并且这些函数也可以是匿名的,因此:
返回{
var foo:function(){return++x},
变量栏:函数(){return--x},
};


因此,对象的属性是函数。

函数
baz
将变量
x
设置为1,然后创建并返回一个对象。此对象有两个字段,一个是
foo
,另一个是
bar
。关于对象,有一点很简单,如果你想访问一个字段,你只需要调用
object.fieldname
。稍后我们将对此进行更多讨论

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

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

在函数末尾定义了一个名为
closures
的变量,这是从函数返回的对象。正如我前面所说,为了访问字段,您需要做的就是执行
object.fieldname
,在本例中是
closures.foo()
closures.bar()
(括号是运行函数所必需的)

我刚测试过,你的警报显示2。我认为原因是它不理解
alert(int,int)
的语法,所以它只显示第一个警报