闭包和参数传递

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js闭包和参数传递</title>
<style type="text/css">
*{
    padding: 0;
    margin: 0;
}


</style>
</head>
<body>
<script type="text/javascript">
    //闭包解析: 有权限访问另外一个函数的作用域,
    // 闭包 可以理解为定义在一个函数内部的函数,
    // 也可以说,闭包是将函数内部与外部链接起来的桥梁
    // 特点,1 ,可以去读函数内部的变量
    //特点2 ,词变量始终保持在内存中,(内存小号较大);相对于inner来说,out是其外部作用域,变量可以天生记住自己的作用域
    //在高级程序设计第三版, 闭包:理解是   对函数类型的值进行传递时候,保留对它的声明和作用域的引用,
    //子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
    //既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!
    function f1(){


    n=999;


    function f2(){
      alert(n);
    }


    return f2;


  }


  var result=f1();


  result(); // 999
//关于闭包 使用需要注意问题
//1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。


//2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值


// 问题2  参数传递
//在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问。而原始类型的值则是可以直接访问到的。
// 参数传递, js高三 原话是,所以的参数传递都是按照值来传递的。(按值 传递是在 栈内存中开辟一块空间存储)
//  什么意思呢? 当传递的为基本类型值得时候, 计算机会在栈内存开辟一块空间进行存储,
//  当传递为 引用类型值的时候, 计算机会在栈内存开辟一块空间存储指针, 指向堆内存的 数据; 
//  栈内存数据是js自己自动创建。并自己回收的; 
</script>


</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值