闭包 Closure()

闭包 Closure()

闭包:指有权访问另一个函数作用域中变量的函数

被访问的变量所在的函数就是一个闭包函数,高阶函数

作用:延伸了变量的作用范围

// fn()是一个闭包,f() 访问了 fn() 里面的 num 变量
function fn() {
   var num = 10
   return function () {
     console.log(num)
   }
 }
 var f = fn()
 f()

案例:要好好分析

  <ul class="nav">
    <li>榴莲</li>
    <li>苹果</li>
    <li>西瓜</li>
    <li>葡萄</li>
  </ul>

  <script>
    var lis = document.querySelector('.nav').querySelectorAll('li')
    for (var i = 0; i < lis.length; i++) {
      (function (i) {
        lis[i].onclick = function () {    // 这里的函数访问了 闭包 里的i变量
          console.log(i);
        }
      })(i)
    }

这里的立即执行函数就是一个闭包

( )( ) 立即执行函数没有名字

( )( ) 立即执行函数:也被称为小闭包,因为 立即执行函数 里面 任何一个函数 ,都可以访问它里面的 i 变量

( )( ) 立即执行函数是闭包,闭包不一定是立即执行函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LR(0)分析法是一种自下而上的语法分析方法,它使用叫做LR(0)项目集的数据结构来表示文法的状态集合。可以使用Java语言来构造识别活前缀的DFA,以下是LR(0)项目集规范族的构造过程: 1. 对于文法的每一个产生式,构造一个初始LR(0)项目集,包含该产生式的一个项。项的形式为"A -> a .Bb",表示在该产生式中,已经识别了a,接下来要识别的是B,b是B之后的符号串。"."表示当前正在识别的位置。 2. 对于每个初始LR(0)项目集,使用闭包操作构造出它的闭包CLOSURE。闭包CLOSURE是指包含该项目集中所有可能的项和它们的后继符号的LR(0)项目集。具体来说,对于每个项"A -> a .Bb",找到所有可能的B产生式,生成新的项"B -> .c",其中c是B的一个后继符号。将这些新的项加入到闭包CLOSURE中,直到没有新的项可以加入。 3. 对于每个闭包CLOSURE,使用GO函数来构造它的转移函数。GO函数是指将一个LR(0)项目集和一个符号作为参数,返回一个新的LR(0)项目集,表示在该项目集中识别该符号之后的状态。具体来说,对于每个项"A -> a .Bb",如果B是该符号,则生成新的项"A -> aB .b"并加入到新的项目集中。 4. 重复步骤2和步骤3,直到没有新的LR(0)项目集可以生成为止。这样就构造出了LR(0)项目集规范族。 最终,可以使用DFA来表示LR(0)项目集规范族,并且可以使用该DFA进行语法分析。具体来说,从起始状态开始,每次读入一个符号,根据转移函数转移到下一个状态,直到达到接受状态或者出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值