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对象的引用,顺利减少引用数,确保正常回收其占用的内存

    }

  • 相关阅读:
    moment获取天的23时59分59秒可以用moment().endOf(String),以及获取天的0时0分0秒可以用moment().startOf('day')
    vue 去除输入框首位的空格
    管道
    事件广播
    iview在子组件中调用父组件的方法
    ZOJ 3430 Detect the Virus(AC自动机)
    HDU 3065 病毒侵袭持续中(AC自动机)
    HDU 2896 病毒侵袭(AC自动机)
    HDU 2222 Keywords Search(AC自动机)
    shell常用命令
  • 原文地址:https://www.cnblogs.com/fashion1993/p/4025331.html
Copyright © 2011-2022 走看看