为什么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。
其实这些很多时候都不用问,执行执行就都清楚了。