felayman------javscript函数小知识点

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>函数表达式</title>
    <script type="text/javascript">
        //第一种函数定义方法(常规函数定义)
        sayHello();
        function sayHello(){
            alert("hello");
        };
        /*
        在初学的时候,我觉得上面的代码会报错,但是没有,后来挺纠结的,后来明白的javascript
        的解释原理,就清楚了.javascript在调用一个函数的额时候,碰到sayHello()的时候,会去
        寻找该函数的申明,如果在当前上下文中找到了,则回去调用申明函数的函数体,继续执行下去,
        如果寻找不到,才会报错.
         */
        //第二种函数定义方法(匿名函数定义)
        //sayHi();//由于我使用的是PHPSTORM,这里直接显示错误
        var sayHi = function(){
            alert("hi");
        };
        /*
            上述代码就出现问题了,因为不存在函数申明,所有代码执行到sayHi();的时候,
            通过上下文,找不到该函数的申明,所以会报错
         */
        sayHi();
        /*
            这样,程序就能执行下去了,因为在执行到sayHi();的时候,javascript解释器
            会在后台帮我们把上面的匿名函数转换成一个常规函数,这样就正常执行了.
         */
        /*
            下面说说匿名函数和闭包,也许很多开发者没有注意这样的问题,因为毕竟他们
            做前端久了,没有学习过java,所谓的匿名函数,就是隐藏掉函数名而直接使用
            或定义的函数,而闭包,就是在函数内部还定义了另外一个函数,内部函数可以访问
            外部函数的数据,但是外部函数却不能访问内部函数的数据,这个跟java中的内部类
            类似.
            如在java中我们可以这些一个类
            public class Outer{
                String name;
                public class Inner{
                    int age;
                }
            }
            这样的话,内部类就可以访问外部类属性name,但是外部类却不能访问内部类的age属性
            同理,闭包也是如此,如:
         */
        function outer(num){
            return function(param1,param2){
                //在内部函数里可以访问外部数据
                var value = num;
                var value1 = param1;
                var value2 = param2;
                if(value==value1){
                    return 0;
                }else if(value==value2){
                    return 1;
                }else{
                    return -1;
                }
            };
        }
        /*
            上述代码就是由两个函数嵌套使用的,因此,这样的结构叫闭包.
         */
    </script>
</head>
<body>

</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值