六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 40|回复: 0

js的一个小知识点

[复制链接]

升级  48%

6

主题

6

主题

6

主题

童生

Rank: 1

积分
24
 楼主| 发表于 2012-12-22 21:19:22 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body"><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>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表