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、特此記下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP35EeJpmT4FFVOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL5EjN2MTNyEjMyATMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)