首页 > 网站 > WEB开发 > 正文

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

2024-04-27 14:18:04
字体:
来源:转载
供稿:网友

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

}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表