zoukankan      html  css  js  c++  java
  • JavaScript Function(函数表达式)

      创建函数

      创建函数的方式有两种:1、函数声明,2、函数表达式

      函数声明的语法为 

    functionName();  //不会报错,函数声明提升
    function functionName(arg0,arg1,arg2) { //do somethings; }
    alert(functionName.name);  //输出 functionName

      也可以采用函数表达式创建函数

    functionName();  //会报错,此时 functionName 仅仅是 var functionName,其值为 undefined;
    var functionName = function(arg0,arg1,arg2) { //do somethings; }
    alert(functionName.name);  //输出 ""

      


      递归

      当一个函数可以通过名字调用自身,说明该函数为 递归函数.

      

    function functionName() {
        // do somethings;
        return functionName();
    }
    
    var another = functionName;
    functionName = null;
    
    another();    //报错, 因为找不到 functionName();
    
    function functionName() {
        // do somethings;
        return arguments.callee();        //指向该函数的指针
    }
    
    var another = functionName;
    functionName = null;
    
    another();  //不报错.
    

      


      闭包

      了解闭包,首先了解函数的作用域。

      函数作用域里的变量,会一级级的向上查找变量,直到找到为止,找不到则报错.

    var a = 1;
    function getA(){
        alert(a);  //当在当前作用域找不到变量时,会去父作用域查找该变量,直到找到为止,如果找不到,则报错.
    }
    getA();        //1;
    

      但是,函数作用域外的变量,则访问不到函数作用域里的变量。

    function setA(){
        var a = 1;
    }
    setA();
    alert(a);    //报错.因为变量 a 不能访问到 setA 里的变量,且外部也没有 变量a
    

      创建一个闭包函数,来访问函数里的值。

    var a = 5;
    function func(){   var a = 1;   return {     "get":function(){       alert(a);     },     "set":function(num){       a=num;     },     "getthis":function(){       alert(this.a);     }   } } var a = func();  //闭包
    a.get();  //输出 1;
    a.set(2);
    a.get();  //输出 2;

    var b = func();  //闭包
    b.get();  //输出 1;
    a.set(3);
    b.get();  //输出 1;
    a.get();  //输出 3;

      由上个例子可见,闭包会造成内存占用比以前更多。因此要谨慎使用闭包。


     模仿块级作用域

      由于 JavaScript 没有块级作用域,会导致有些时候会出差错,得不到我们想要的结果。

    function func() {
      var i = 5; for (var i =0;i<10;i++) { //alert(i); } alert(i); //输出10; 并不是我们想要的10; }

      因此 可以利用 立刻执行的匿名函数,来模拟块级作用域。

    function func() {
        var i = 5;
        (function(){
            for (var i = 1;i < 10;i++) {
                //alert(i);
            }
        }());
        alert(i);    //输出 5
    }
    

      


      

  • 相关阅读:
    hdu1066之数学题
    hdu1065计算几何
    hdu1060
    hdu1056
    appium安装说明
    LR安装说明
    网络编程
    读写excel
    dom
    HTML
  • 原文地址:https://www.cnblogs.com/linjilei/p/5155829.html
Copyright © 2011-2022 走看看