[英]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},
};
就是它
函数baz
返回一个具有两个属性( foo
和bar
)的对象。 这两个属性的值是函数(两者都修改并返回相同x
变量的值)。
Yo甚至可以在函数之后省略foo()
,因为这些属性将按照您的意思命名,并且这些函数也可以是匿名的: return { var foo: function() {return ++x}, var bar: function() {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)
的语法,所以它只显示第一个警报。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.