javascript模块化教程学习笔记07

显然:在函数外部无法访问内部的局部变量:

function f1(){
    var n = 9999 ;
}
alert(n) ;  //error

当需要这样做时,可以使用闭包。

闭包:  闭包函数就是一个嵌套结构的函数,在一个函数内定义一个函数。

     由于在javascript语言中,子对象可以向上一级一级的寻找所有父元素的变量,父元素的所有变量对子元素都是可见的,反之,不成立。

     所以内嵌函数可以访问定义在外层函数中的所有变量和函数。但是从函数外部不能访问函数的内部变量和嵌套函数。当需要从函数外部获取内部的局部变量时,可以使用闭包:

function f1(){
    var n = 0 ;
    function f2(){
         return n +=1;
    }
    return f2;
}
var add = f1();
console.log(add());  //1
console.log(add());  //2
console.log(add());  //3

  函数f2嵌套在函数f1内部,函数f1返回函数f2,变量add指向函数f2。

  在f1执行完并返回后,闭包使得javascript的垃圾回收机制不会回收f1所占用的资源(因为f2的执行依赖于f1中的变量),造成函数中的变量都被保存在内存中。

  闭包的使用场景:提升效率:1.需要读取函数内部的变量;  2.让这些变量的值始终保存在内存中。

  闭包的缺点:  变量一直在内存中会让内存消耗过大,闭包同时关系到内存和执行速度。不能滥用闭包。

匿名函数:

  匿名函数是没有名字的函数,当代码只需运行一次时,匿名函数有利于减少函数名称冲突的风险,有效避免全局变量的污染。

  语法格式:

function (){
    //函数体
}

匿名函数自调用:

( function() {
       // 函数体;
})  ();

  也可以把匿名函数赋值给某个对象的事件,在解释器经过时会立即运行:

  比如:

window.onload = function () {
    alert("页面加载完毕。");
};

猜你喜欢

转载自www.cnblogs.com/mingnai/p/12289335.html