zoukankan      html  css  js  c++  java
  • 函数细节2

     1  <script>
     2 
     3         //关于变量提升现象:
     4         console.log(a);     //undefined
     5         var a = "Hello";    
     6         console.log(a);     //Hello
     7 
     8         // 上面的表达式由于变量提升,变成下面的样子。这就是变量提升的现象
     9 
    10         var a;
    11         console.log(a);
    12         a = "Hello";
    13         console.log(a);
    14 
    15         //在函数里面同样的道理
    16         var b = "Hello"
    17         function fn(){
    18             console.log(b);     //undefined
    19             var b = "Hi";       //变量提升提升到了函数内部一开始处
    20             console.log(b);     //Hi
    21         }
    22 
    23         fn();
    24         console.log(b);     //Hello
    25 
    26 
    27         //另外一种函数的声明方式
    28         /*
    29         匿名函数:
    30             像定义一个变量一样去声明,把整个函数看成一个变量,用函数表达式的方式声明:
    31 
    32         */
    33         //函数声明。(通常写的一种方式)
    34         fn1();
    35         function fn1(){
    36             console.log("fn1");
    37         }
    38         fn1();
    39 
    40         //匿名函数
    41         // function (){         
    42         //     console.log("这是一个函数表达式");
    43         // }        //直接这样写它是一个函数表达式,不赋值给变量的话会报错,需要一个变量接收它。
    44         // 如下:
    45         //函数表达式(又叫:命名函数表达式)
    46         var fn2 = function (){
    47             console.log("这是一个匿名函数");
    48         }
    49         fn2();      //只能在声明后调用(因为有变量提升)
    50 
    51         var fn3 = fn2;      //既然是变量,它还可以被重复赋值。
    52         fn3();    //现在这个函数相当于有两个名字:fn2,fn3。 这两个名字都可以调用它
    53         //函数声明也可以起这样的别名,重复赋值就行。所以不是说一个函数命名之后就不可改变,
    54 
    55 
    56         //立即执行函数:匿名函数不一定要赋给一个变量,有时候我们会见到如下几种函数,就叫立即执行函数
    57         //立即执行函数是一次性的,只能被执行一次。
    58         (function (){
    59             console.log("这是一个立即执行函数");
    60         })();
    61 
    62         /*立即执行函数也可以接收参数*/
    63         (function (name){
    64             console.log("Hello,",name);
    65         })("小明");
    66 
    67         /*立即执行函数也可以有返回值*/
    68         var r = (function (a,b){        //这里的 r 接收的是返回值,而不是这个函数。
    69             return a + b;
    70         })(5,7);
    71         console.log(r);
    72 
    73         console.log(typeof fn2);        //检测变量类型,在这里检测的结果是:function
    74         console.log(typeof fn3);
    75 
    76 
    77 
    78         /*
    79         js当中数据类型分为两大类
    80             1:基本数据类型:重复赋值时赋的是数据本身,所以一个修改不会改变另一个的结果;
    81                 number,string,boolean,undefined,null
    82             2:引用数据类型:赋值时赋的是地址本身,操作了地址,一个修改就会影响所有的结果;
    83                 array,object,function,Math,Date
    84         */
    85     </script>
  • 相关阅读:
    css3 Gradient背景
    ArrayList源码解析(一)
    css3 @font-face
    ArrayList源码解析(二)自动扩容机制与add操作
    ArrayList源码解析(三)
    JavaScript基础
    JavaScript中的字符串方法总结
    一个完整的HTTP请求过程
    HTML5学习
    JS编程
  • 原文地址:https://www.cnblogs.com/Army-Knife/p/13358713.html
Copyright © 2011-2022 走看看