博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么是闭包?变量作用域和闭包。
阅读量:6321 次
发布时间:2019-06-22

本文共 1033 字,大约阅读时间需要 3 分钟。

变量作用域和闭包

变量作用域

当我们写 js 文档的时候经常会设置变量,变量的类型有两种:

  • 全局变量
  • 局部变量

这两种类型的变量有者不同的作用范围,全局变量的作用范围是面向整个文档的,可以称之为全局作用域,局部变量是在函数内部设置的,作用范围为当前的函数,外部不能直接引用,因此称为函数作用域。

var a=1;function test(){    var b=2;    console.log(a) }test()// 1console.log(b) //error

闭包

  • 简单来说嵌套在函数里的函数以及周边的变量叫闭包
  • 闭包周边的变量在执行完函数之后不会被释放,会常驻内存
function test(){    var a = 1;    function test1(){        var b = 2    }return test1}var test2=test()test2();

上面的代码就是一段闭包,函数test1被包裹在函数test中,对于test1而言,test内的所有变量都是可见的,但是反过来不行。将test1作为返回值,就可以在test外部进行读取了。

function test(){    var a = 1;    function test1(){        a++        console.log(a)    }return test1}var test2=test()test2();//2test2();//3test2();//4

在上面的代码中,函数test2实际上就是函数test1的闭包函数,我们让其执行三次,结果分别为2、3、4。这是因为,函数test中的局部变量一直被保存在内存中。所以闭包有个缺点,就是内存占用较大。

自执行函数

var callback=(function(){    var a = 1;    function test(){        a ++;        console.log(a)    }    return test;})();callback();2callback();3

上面这段函数也是闭包的一种。

我们利用闭包来做一个小例子。

    
  • 1
  • 2
  • 3

我们创建了一个列表,当我们点击列表的时候,浏览器将列表里的内容弹窗显示。

END

转载地址:http://emvaa.baihongyu.com/

你可能感兴趣的文章
父窗口jquery触发iframe按钮事件(转载)
查看>>
.Net Core下发送WebRequest请求的两种方式
查看>>
java 构造方法
查看>>
Bash,Vim,gdb&git常用命令
查看>>
没有好看的 Terminal 怎么能够快乐地写代码
查看>>
hitTest和pointInside如何响应用户点击事件
查看>>
es6 Module语法
查看>>
A Color Picker based on manifold learning
查看>>
深入理解 JavaScript Function
查看>>
MySQL<事务与存储过程>
查看>>
分页技巧_实现第一个分页功能(回复列表中的分页)
查看>>
输入某年某月某日,判断这一天是这一年的第几天?
查看>>
PhpCms V9调用指定栏目子栏目文章的方法
查看>>
Python之Fabric
查看>>
AFNetworking 3.0 断点续传 使用记录
查看>>
20145223 《信息安全系统设计基础》课程总结
查看>>
iOS评论App----常用时间的处理
查看>>
spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例...
查看>>
leetcode503
查看>>
leetcode1089
查看>>