码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript高级程序设计(第三版)第七章 函数表达式

时间:2014-10-15 00:50:09      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   java   for   sp   div   

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

函数声明提升:

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

}

 

JavaScript高级程序设计(第三版)第七章 函数表达式

标签:style   blog   color   io   ar   java   for   sp   div   

原文地址:http://www.cnblogs.com/fashion1993/p/4025331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!