[英]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.