T-JS核心-day04-JS匿名函数、作用域和作用域链、闭包

本文深入探讨JavaScript中的匿名函数、作用域和作用域链以及闭包的概念。介绍了匿名函数的定义、使用场景,强调了它们在内存管理和防止全局污染中的作用。接着详细阐述了作用域的原理,包括全局作用域和函数作用域,并解释了作用域链的工作方式。最后,讲解了闭包的概念,作为重用和保护变量的编程技术,以及如何创建和利用闭包,同时也提到了闭包可能带来的内存消耗问题及其解决方案。
摘要由CSDN通过智能技术生成

四、Function对象

1. 匿名函数

  1. 什么是:定义函数时,不指定函数名的函数
  2. 为什么:2大优点
    1. 节约内存
    2. 避免产生全局变量,造成全局污染
  3. 何时用:2种情况
    1. 几乎所有回调函数都要定义为匿名函数
    2. 匿名函数自调用
  4. 如何用:2种情况
    1. 回调函数
      1. 什么是:自己定义了函数,但是不由自己调用,而是交给另一个函数,由另一个函数按需自动调用-----给别人用的函数
        举例1:想将一个数字内容的数组升序排列
        arr.sot(function(a,b){
                 return a-b})
        

        补充
        sort() 方法,有一个可选参数,必须是函数,供它调用。那么就是个回调函数咯!回调函数的参数要有两个:第一个参数的元素肯定在第二个参数的元素前面!!!这个方法的排序是看回调函数的返回值: 如果返回值大于 0,则位置互换。 如果返回值小于 0,则位置不变。
        举例2:想根据不同的敏感词,动态选择不同的新值替换
        str=str.replace(/正则表达式/,function(keyword){
                 return 不同新值})
        
      2. 为什么回调函数都要定义为匿名函数:为了节约内存!
    2. 匿名函数自调:
      1. 什么是:定义一个匿名函数后,立刻调用该函数执行,调用后立即释放
      2. 为什么:避免产生全局变量,造成全局污染
      3. 何时用:今后一切js代码都应该放在一个大的匿名函数自调内!尽量不要使用全局变量!
      4. 如何做:
        1. 标准写法:
          var 变量名=(function(形参变量列表){
                     
              ...return 返回值
          })(实参值列表);
          
          创建新函数,立刻调用执行
          因为该函数没有名字,所以调用后,立刻释放
        2. 非主流写法:
          +function(){...}()
          !function(){...}()

          强调:结尾的(),必须要加,表示调用
      5. 示例:使用匿名函数自调避免全局污染
          <script>
            // 全局变量,记录程序执行的总时间
            var t=0;
            // 第一段程序:执行0.3s
            !function(){
                  
              t+=0.3;
              console.log(`任务一耗时0.3s`);
            }();
            // 假设之后在此处添加了以下代码,这里出错了,需要记录出错时间
            (function(){
                  
              // 局部变量,碰巧和全局变量重名了,也不会影响到全局变量
              var t=new Date();
              console.log(`这里出错了,在${
                    t.toLocaleString()}`)
            })();
            // 第二段程序:执行0.8s
            +function(){
                  
              t+=0.8;
              console.log(`任务二耗时0.8s`);
            }();
            console.log(`共耗时${
                    t}s`);
          </script>
        
        输出结果:
        任务一耗时0.3s
        这里出错了,在2020/5/4 下午8:21:04
        任务二耗时0.8s
        共耗时1.1s

2. 作用域和作用域链

  1. 什么是作用域(scope):
    1. 从作用是说:作用域就是一个变量的可用的范围
    2. 从本质上说:作用域其实保存变量的特殊对象
  2. 为什么用作用域:为了避免不同范围之间的变量互相干扰
  3. JS中包括2级作用域
    1. 全局作用域

      1. 什么是:在程序任何位置都可以随意访问的,专门保存全局变量的存储
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值