js的一个小知识点

<script type="text/javascript">
//问题背景:以前经常看见这种写法var a=a1(); a();其实这里面也是有问题的。

//函数a1
function a1() {
alert("aaa");
}


//函数a2
function a2() {
return 2;
}

//函数a3
function a3() {
return function () {
alert("3");
}
}


//请看例子一,下面这段代码是有问题的,分析代码:首先a1()会先执行,弹出aaa,但是没有值可以赋给a4,所以a4的值为undefinded,所以a4也不是一个指向函数或者对象的引用,所以a4()根本就不会执行。并且浏览器报错


var a4 = a1();
a4();

//请看例子二,下面这段代码也是有问题的,分析代码:首先a2()执行,会返回值1并且赋给a5,那么现在a5的值为1,a5也不是一个指向函数的引用,所以a5()自然也不会执行。
var a5 = a2();
a5();

//请看例子三,下面这段代码没有问题,分析代码:首先a3()执行,会返回一个匿名函数,a6指向的匿名函数,所以a6()也会执行并且弹出3.
var a6 = a3();
a6();

//总结:针对var a=a1(); a();这种写法,以前认为理所当然,现在看来不尽然。这要取决于a1函数内部的返回值。

如果没有返回值(比如就弹出框),那么a()这样执行时没有意义的。

如果返回值为数值,那么a()也是没有意义的;

只有返回值也为一个函数对象的时候,a()执行才是有意义的,a()执行的是返回的那个匿名函数对象。



</script>

posted @ 2012-07-01 01:39  菩提下的木树  阅读(366)  评论(1编辑  收藏  举报