javascript对象---11 闭包
javascript对象---11 闭包
奋斗的小芋头 发表于1年前
javascript对象---11 闭包
  • 发表于 1年前
  • 阅读 23
  • 收藏 2
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

一、目的

1.闭包(closure) : 闭包的目的是 读取 其他函数内部变量,由于正常函数执行后都会进行弹栈,从而不再保存临时变量,因此闭包 会使函数的临时变量永久的保存在内存中。

定义一个函数,函数内容执行过程,会把函数中变量放在堆内存,或栈内存中,一旦整个函数执行结束,栈内存弹出,堆内存等待垃圾回收,执行后无法访问临时变量,而闭包可以访问临时变量,

2.通过内部函数才能访问函数的变量,因此所有闭包的实现方式都是通过内部函数的方式实现。

目的:读取当前函数在执行过程中的临时变量的值

3.闭包会导致函数执行过程中内存不会释放,要注意使用场景与频繁程度。

 

获取函数临时变量的值

1. 用返回 return

<script>
            function fun(){
                var obj = {
                    name :"zhangsan"
                }
                return obj;
            }
            var a = fun();
            console.log(a);
</script>

2.  定义一个全局函数

function fun(){
                var obj = {
                    name :"zhangsan"
                };
                
        //此时inner相当于全局函数,相当于在window里面加了一个inner属性,
        //inner属性对应的值为 function, 返回当前临时变量obj
                inner = function (){ 
                    return obj;
                }
                
            }; //fun()
            //第一步要先调用 fun()
            fun();     //已经加载 全局函数 inner()到 window环境;
            var ob =inner();
            console.log(ob.name);

通过在函数体内设置一个 全局function 获取函数内临时变量的值---全局变量函数,对局部变量对象 obj进行了引用,js识别 obj 被占用-----就不会弹栈,所以每次执行inner时可以访问,------但造成obj不弹栈--不知道什么时候会调用,造成内存浪费

3.定义一个内部函数,并返回

function fun(){
				var obj = {
					name :"zhangsan"
				};
		
				
				//对于当前内部函数来说 ret有访问内部对象的权利
				function ret(){
					return obj;
				}
				return ret ; // ret没加()代表当前返回的是函数对象
				
			};
			
			
			var ret = fun();  //ret本身是一个函数
			var obj = ret();
			console.log(obj)

通过内部函数返回,ret()方法内访问obj对象,

var ret = fun();   //引用了 ret所以 ret 不会出栈
 var obj = ret();

 

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 79
码字总数 129412
×
奋斗的小芋头
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: