zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计(第三版)第七章 函数表达式

    一种是函数声明;另一种是函数表达式。

    函数声明提升:

    say Hi();

    function say Hi(){

      alert("Hi!");

    }      //这个例子不会抛出错误,因为在代码执行之前会先读取函数声明。

    匿名函数:var functionName=function(arg0,arg1,arg2){函数体};

    sayHi();   //错误:函数还不存在

    var sayHi=function(){

      alert("Hi!");

    };


    //不要这样做                                                   //可以这样

    if(condition){                                                var sayHi();

      function sayHi(){             if(condition){

        alert("Hi!");                sayHi=function(){

      }else{                      alert("Hi!");

        alert("Yo!");                };

      }                      }else{

    }                           alert("Yo!");

                              };

                            }

    7.1 递归

                function factorial(num){
                    if (num <= 1){
                        return 1;
                    } else {
                        return num * factorial(num-1);             //return num * arguments.callee(num-1);这是正确的
                    }
                }
    
                var anotherFactorial = factorial;
                factorial = null;
                alert(anotherFactorial(4));  //error!

    7.2 闭包

    闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。

    function fn(propertyName){

             return function(object1){

                       var v1 = object1[propertyName]; //访问了外部变量propertyName变量

             }

    }

    7.2.1 闭包与变量

    function createFunctions(){

             var result = [];

             for(var i=0; i<10; i++){

                       result[i] = function(num){

                                return function(){

                                         return num;

                                }

                       }(i);

             }

    }

    var funcs = createFunctions();

    for(var i=0; i<funcs.length; i++){

             document.write(funcs[i] + ‘<br />’); //output 0,1,2,3…9

    }

    7.2.2 this对象

    如果闭包的作用域中保存着一个HTML元素,那么就意味着该元素无法被销毁。

    function assignHandler(){

             var element = document.getElementById(‘someElement’);

             var id = element.id;

             element.onclick = function(){

                       alert(id);

             };

             element = null; //变量设置为null,才能解除对DOM对象的引用,顺利减少引用数,确保正常回收其占用的内存

    }

    7.2.3 内存泄漏

    如果闭包的作用域中保存着一个HTML元素,那么就意味着该元素无法被销毁。

    function assignHandler(){

             var element = document.getElementById(‘someElement’);

             var id = element.id;

             element.onclick = function(){

                       alert(id);

             };

             element = null; //变量设置为null,才能解除对DOM对象的引用,顺利减少引用数,确保正常回收其占用的内存

    }

  • 相关阅读:
    [转载] mysql5.6 删除之前的ibdata1文件后再重新生成,遇到[Warning] Info table is not ready to be used. Table 'mysql.slave_master_info' cannot be opened.问题
    You must SET PASSWORD before executing this statement解决
    Using unique option prefix myisam-recover instead of myisam-recover-option
    [Warning] TIMESTAMP with implicit DEFAULT value is deprecated
    Oracle® Database Patch 19121551
    python+selenium元素定位——8种方法
    登录10086邮箱
    4、requests 安装
    3、fiddler手机抓包
    2、接口基础知识
  • 原文地址:https://www.cnblogs.com/fashion1993/p/4025331.html
Copyright © 2011-2022 走看看