美文网首页
2021-03-15 js 函数的闭包 outer

2021-03-15 js 函数的闭包 outer

作者: 半眼鱼 | 来源:发表于2021-03-15 22:31 被阅读0次

有一个简单可行的办法,就是让outer自己return掉inner:

1 function outer(){

2 var a = 333;

3 function inner(){

4 console.log(a);

5 }

6 return inner; //outer返回了inner的引用

7 }

8

9 var inn = outer(); //inn就是inner函数了

10 inn(); //执行inn,全局作用域下没有a的定义

11 //但是函数闭包,能够把定义函数的时候的作用域一起记忆住

12 //能够输出333

这就说明了,inner函数能够持久保存自己定义时的所处环境,并且即使自己在其他的环境被调用的时候,依然可以访问自己定义时所处环境的值。

一个函数可以把它自己内部的语句,和自己声明时所处的作用域一起封装成了一个密闭环境,我们称为“闭包” (Closures)。

每个函数都是闭包,每个函数天生都能够记忆自己定义时所处的作用域环境。但是,我们必须将这个函数,挪到别的作用域,才能更好的观察闭包。这样才能实验它有没有把作用域给“记住”。

我们发现,把一个函数从它定义的那个作用域,挪走,运行。嘿,这个函数居然能够记忆住定义时的那个作用域。不管函数走到哪里,定义时的作用域就带到了哪里。这就是闭包。

闭包在工作中是一个用来防止产生隐患的事情,而不是加以利用的性质。

因为我们总喜欢在函数定义的环境中运行函数。从来不会把函数往外挪。那为啥学习闭包,防止一些隐患,面试绝对考。

闭包的性质
每次重新引用函数的时候,闭包是全新的。

1  function outer(){

2  var count = 0;

3  function inner(){

4  count++;

5  console.log(count);

6  }

7  return inner;

8  }

9 

10  var inn1 = outer();

11  var inn2 = outer();

12 

13  inn1(); //1

14  inn1(); //2

15  inn1(); //3

16  inn1(); //4

17  inn2(); //1

18  inn2(); //2

19  inn1(); //5

闭包案例:点击显示li标签

image.png

相关文章

  • 2021-03-15 js 函数的闭包 outer

    有一个简单可行的办法,就是让outer自己return掉inner: 1 function outer(){ 2...

  • 闭包以及内存泄漏

    闭包通俗点来说就是函数外面访问函数内部的变量 当程序执行完var inner = outer(),其实outer的...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • 闭包

    有权访问外层函数的变量的内层函数叫闭包函数闭包是站在作用域的角度上来定义的。因为inner访问到outer作用域的...

  • 前端面试题(持续补充)

    js,node.js基础: 闭包 闭包是能够读取其他函数内部变量的函数。在js中,只有函数内部的子函数可以访问内部...

  • 闭包

    关键词:闭包(closure) 概念:闭包就是能够读取其他函数内部变量的函数,对于js,闭包就是将函数内部和函数外...

  • 2018-01-10

    js中的闭包 一.什么是闭包 闭包官方的解释是:闭包就是能够读取其他函数内部变量的函数。由于在javascr...

  • js 闭包 字符串 定时器

    js闭包 闭包的三大特点为: 1、函数嵌套函数2、内部函数可以访问外部函数的变量3、参数和变量不会被回收。闭包的作...

  • js 闭包 字符串 定时器

    js闭包 闭包的三大特点为: 1、函数嵌套函数2、内部函数可以访问外部函数的变量3、参数和变量不会被回收。闭包的作...

  • 闭包小记

    什么是闭包? 闭包就是能够读取其他函数内部变量的函数。在js中,只有函数内部的函数才能读取局部变量,所以闭包就是“...

网友评论

      本文标题:2021-03-15 js 函数的闭包 outer

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