為什么JS調用函數時,有時不帶括號,有時又帶括號?
比如定義一個無參函數funtion get() {......}, 然后后面調用它時有時寫var x=get;有時又是var x=get();怎么回事?
答:
>var x=get; //傳遞的是函數對象
var x=get(); //傳遞的是函數返回值
get 是函數自身, get() 是運行函數
如果 var x=get;
那么 x 和 get 是等同的
var x=get();
那么 x 是 函數 get 的返回值
例如
function get(){return 1}
var x=get(); 那么 x 就等于 1 咯
如果是
var x=get;
那么
var y=x(); 和 var y=get(); 都是等價的。
這是對一個方法調用 是方法本身的調用不需要括號 帶括號是函數的調用 有返回值
使用js之前,要理解,everything is object ,任何東西都是對象。
所以function也是對象
function my(){};
其實就是生成了一個名字叫做my的對象,這個對象是個function對象,它等同于
var my=function(){};
他們的區別是作用域不同,前者是window級別是globar的,一些瀏覽器認為是window對象下面的my屬性。后者是當前作用域下的my對象
一般在my后面加上() 認為是執行這個function對象中的內容。由此得知
var my1=my;//其實就是吧my對象賦值給my1 my1是個function對象。
var my1=my();//先執行my對象映射的函數,然后把執行結果(return關鍵字返回的值)給my1.
當然如果my函數中沒有return 則返回undefind。
其實這些很多時候都不用問,執行執行就都清楚了。