飞鹰 发表于 2013-1-4 02:44:41

js的一个小知识点

<div id="cnblogs_post_body"><script type="text/javascript">
    //问题背景:以前经常看见这种写法vara=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()根本就不会执行。并且浏览器报错
http://pic002.cnblogs.com/images/2012/296640/2012070101382768.png

      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>
页: [1]
查看完整版本: js的一个小知识点