首页 > 代码库 > JAVASCRIPT基础06-闭包
JAVASCRIPT基础06-闭包
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title> <script type="text/javascript"> /** * 闭包 * 1. 概念 * 闭包的严格定义是“由函数(环境)及其封闭的自由变量组成的集合体” * 通俗的讲就是:可以访问一个函数作用域里变量的函数 * * 例如: */ var generateClosure = function() { var count = 0; var get = function() { count ++; return count; }; return get; }; var counter1 = generateClosure(); var counter2 = generateClosure(); console.log(counter1()); // 输出 1 console.log(counter2()); // 输出 1 console.log(counter1()); // 输出 2 console.log(counter1()); // 输出 3 console.log(counter2()); // 输出 2 /** * 当一个函数返回它内部定义的一个函数时,就产生了一个闭包, * 闭包不但包括被返回的函数,还包括这个函数的定义环境。 * 上面例子中,当函数generateClosure() 的内部函数 get 被一个外部变量 counter1 引用时,counter1 和generateClosure() 的局部变量就是一个闭包 */ /** * * 闭包的注意点 * 1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。 * 解决方法是,在退出函数之前,将不使用的局部变量全部删除。 * 2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用, * 把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便 */ // 案例 var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; console.log(object.getNameFunc()()); //The Window /** * object.getNameFunc()得到的是一个闭包 ,闭包可以访问object中的任意变量 但是这里使用的是this.name ;this表示的是window全局对象 因此输出 The Window * 如果代码为 return name ; //则输出 My Object 这里要注意this的用法 */ </script></head><body></body></html>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。