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>
TAG: