天天看點

react中函數帶()和不帶()引發的問題

1、在一次使用

react-ant-design-mobile

元件的時候,由一個函數定義引發的BUG。

  • 代碼如下
這裡要實作的功能是,定義一個Toast回調函數,在提示之後進行一系列操作。
           
  • 錯誤寫法
}).then(() => {
      Toast.success('釋出成功', 1, this.onClose());
    });
  }

  onClose = () => {
  ........
  }
           
  • 正确寫法 也就是去掉this.onClose的括号,其實也是一個不經意多寫的括号引起的問題,有括号的話onClose函數的内容并沒有實作回調的目的,而是立即執行。
}).then(() => {
      Toast.success('釋出成功', 1, this.onClose);
    });
  }

  onClose = () => {
  ........
  }
           

2、特意查了一下

函數隻要是要調用它進行執行的,都必須加括号。此時,函數()實際上等于函數的傳回值。當然,有些沒有傳回值,但已經執行了函數體内的行為,這個是根本,就是說,隻要加括号的,就代表将會執行函數體代碼。


不加括号的,都是把函數名稱作為函數的指針,用于傳參,此時不是得到函數的結果,因為不會運作函數體代碼。它隻是傳遞了函數體所在的位址位置,在需要的時候好找到函數體去執行。

           

3、這讓我想到了之前遇到的一個React問題,同樣是這樣原因

4、特此記下

react中函數帶()和不帶()引發的問題