美文网首页
js闭包的作用

js闭包的作用

作者: 小小鱼yyds | 来源:发表于2021-07-09 11:59 被阅读0次

在es6之前,js只具有函数作用域(缺少块作用域),并通过闭包的内部的引用传递值。但是在es6之后,出现了let和const,实现了块作用域。

函数套函数的方式可以创造出一个局部变量,这种方式就叫做闭包。

比如:

 function foo(){
     var local = 1
    function bar(){
       local++
    return local
   }
return bar
}
var func = foo()
func()

local和bar函数组成了一个闭包,外部不能直接获取local的值,但是通过bar函数可以得到。

在实际应用中,比如在开发一款游戏,全局定义了主人公有几条命,如果不希望别人不小心更改了这个值,就可以把它放在一个立即执行的闭包里,有需要的时候调用闭包里的函数就可以了。

main.js

!function(){
   var lives = 50
   window.addLife = function(){  // 加一条命
     lives += 1
     console.log('现在有几条life1--',lives)
   },
   window.decLife = function(){  // 减一条命
     lives -= 1
     console.log('现在有几条life2--',lives)
   }
   window.getLife = function(){  // 获取目前有多少条命
     return lives
   }
   console.log('现在有几条life--',lives)
}()

helloWord.vue:

<template>
  <div class="hello">
    <p>显示全局的Life:{{lifes}}</p>
    <button @click="addLife">加一条life</button>
    <button @click="decLife">减一条life</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      lifes:0
    }
  },
  mounted(){
     this.lifes = window.getLife()
  },
  method:{
    addLife(){
       window.addLife()
       this.lifes = window.getLife()
    },
     decLife(){
        window.decLife()
        this.lifes = window.getLife()
     },
  }
}
</script>

这样就能通过调用函数的方式访问和更改一个局部的生命值,从而避免产生全局变量,影响整体环境,增加代码的兼容性。

由于匿名函数无法像普通函数一样随意调用,可以将它转换为立即执行函数,以下为立即执行函数的几种写法:

  • !fuction(){}()
  • ~fuction(){}()
  • +fuction(){}()
  • -fuction(){}()
  • void fuction(){}()
  • (fuction(){}())
  • (fuction(){})()

相关文章

  • JS闭包大结局(JS闭包系列3)

    在上一篇中再谈JS闭包(JS闭包系列2),我详细的介绍了JS中的变量作用域相关的概念,结合第一节关于JS闭包(JS...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • 闭包??

    什么闭包,闭包有什么用?http://js.jirengu.com/pogadikofa/1/闭包是在某个作用域内...

  • Javascript 闭包

    如果要了解闭包,我们需要先了解闭包的由来,闭包的产生,源于JS的词法作用域 词法作用域 作用域是指一个 变量能够访...

  • js闭包的理解

    什么是闭包 通俗的来讲,个人觉得闭包就是延长变量作用域的函数。众所周知js的作用域分为全局作用域和链式作用域。在函...

  • js闭包的作用

    在es6之前,js只具有函数作用域(缺少块作用域),并通过闭包的内部的引用传递值。但是在es6之后,出现了let和...

  • JS中的闭包机制一

    //借鉴了阮一峰大神的闭包日志,谢谢! 要理解闭包(closure),首先需要掌握的是JS中的作用域吗,变量的作用...

  • Javascript-基本知识(六)

    1. 闭包 1 闭包的作用: 2 setTimeOut和闭包: js本身是单线程。 单线程的局限性:执行多个任务时...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

网友评论

      本文标题:js闭包的作用

      本文链接:https://www.haomeiwen.com/subject/pbcfpltx.html