簡體   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