其實總結起來以下:
函數只要是要調用它進行執行的,都必須加括號。此時,函數()實際上等於函數的返回值。固然,有些沒有返回值,但已經執行了函數體內的行爲,這個是根本,就是說,只要加括號的,就表明將會執行函數體代碼。
不加括號的,都是把函數名稱做爲函數的指針,用於傳參,此時不是獲得函數的結果,由於不會運行函數體代碼。它只是傳遞了函數體所在的地址位置,在須要的時候好找到函數體去執行。函數
因此通常時候咱們都是採用的是無括號的緣由。這也是因爲括號的二義性,由於括號是「函數調用運算符」,至關於在執行這樣一個函數,因此產生的問題在理解了以後也就理解了。post
另外:除了兩邊不加括號,也能夠兩邊都加括號來實現函數的拷貝,而不是執行函數,若是左邊無圓括號右邊有圓括號,實際就是至關於產生的是一個屬性而不是一個方法了,在調用的時候只用屬性名或者函數名,而不須要再用函數調用運算符圓括號了,由於它就至關於一個屬性,固然也能夠用函數調用的方式來調用,加上括號,拿上例子來講就是若是寫成person.sayHello =sayHi(),在調用sayHello的時候就能夠直接用person.sayHello或者person.sayHello()了,兩者都實現相同的效果。指針
百度知道的回答:blog
函數只要是要調用它進行執行的,都必須加括號。此時,函數()實際上等於函數的返回值。固然,有些沒有返回值,但已經執行了函數體內的行爲,這個是根本,就是說,只要加括號的,就表明將會執行函數體代碼。 不加括號的,都是把函數名稱做爲函數的指針,用於傳參,此時不是獲得函數的結果,由於不會運行函數體代碼。它只是傳遞了函數體所在的地址位置,在須要的時候好找到函數體去執行。