JS调用函数加不加括号的区别

关于调用js方法加不加括号的一个例子:

function run(){
	alert("doing...");
	return "str";
}

alert("run:"+run); //不带(),获取方法内容
run();//带(),调用方法执行
alert("run():"+run());//带括号,获取方法返回值

1.调用函数加括号:执行函数体run(),执行后run()等于其返回值,如上例中执行后run()等于“str”

2.调用函数不加括号:不会执行函数体,自然不会有函数返回值。而是把函数名称作为函数的指针,把整个函数体传过去,在需要的时候好找到函数体去执行。

3.注意:js中的回调函数都是使用函数引用,所以回调函数是不写括号的!

看一个回调函数不加括号的例子:

xmlhttp.onreadystatechange=callback;

/*

说明:注册回调函数只用函数名,不加括号,是因为该句只是把回调函数名注册给xmlhttp.onreadystatechange。如果加了括号,则是调用函数然后把函数的返回值 注册给xmlhttp.onreadystatechange

*/

情形一:xmlhttprequest.onreadystatechange= myFunction;//把myFunction函数作为一个对象赋值给onreadystatechange.

情形二:xmlhttprequest.onreadystatechange= myFunction()//把myFunction函数的返回值赋值给onreadystatechange. 如果它的返回值是个函数的话,当然可以这么用;可一般返回值是一个值。

另外一个例子:

var myFunc=function(){/*code*/}
window.onload=myFunc;
//等同于:
window.onload=function(){/*code*/}

你可能感兴趣的:(JS调用函数加不加括号的区别)