繁体   English   中英

无法理解JavaScript函数的返回

[英]Can't understand a 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

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

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

  • 两种功能都可以看到和修改
  • 不能以其他方式阅读或修改

与...的主要区别

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

就是它

  • x由创建对象的闭包保护
  • 关于x,不存在名称冲突,并且全局命名空间不会混乱

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

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

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

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

功能foobar非常简单。 如果你不确定++ x和--x在这里做了什么是一个很好的Stackoverflow问题:

C ++中的增量 - 何时使用x ++或++ x?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM