JS_闭包
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
使用闭包的注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便
改变父函数内部变量的值。
JavaScript闭包例子
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
}
innerFun()
上面的代码是错误的.innerFun()的作用域在outerFun()内部,所在outerFun()外部调用它是错误的.
改成如下,也就是闭包:
Js代码
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
return innerFun; //注意这里
}
var obj=outerFun();
obj(); //结果为1
obj(); //结果为2
var obj2=outerFun();
obj2(); //结果为1
obj2(); //结果为2
什么是闭包:
当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.
相关文章
- js - 关于循环
- JS基础 作用域与闭包
- reveal.js实现html播放ppt的炫酷效果
- JS高级--函数进阶(原型、调用方法、this、bind、严格模式、闭包、垃圾回收、递归深拷贝、匿名函数、回调函数、立即执行函数)
- js 从两道面试题加深理解闭包与箭头函数中的this
- JS Generator函数yield表达式示例详解
- JS模式:策略模式,感觉就是一个闭包存储信息,然后是加一些验证方法--还看了老半天
- js图片加载效果(延迟加载+瀑布流加载)
- js-cookie 设置过期时间
- js里面的实例方法和静态方法
- JS高阶---回调函数
- js中的闭包内存泄漏的两种解决方法
- jquery.dad.js实现table的垂直拖拽(并取到当前拖拽对象)
- 让 Node.js 支持 ES6 的语法
- js闭包的理解
- WEB前端大作业-简约风格装潢公司设计响应式网页模板(HTML JS CSS))
- [js高手之路] html5新增的定时器requestAnimationFrame实战进度条
- Node.js:get/post请求、全局对象、工具模块
- 2023华为OD机试 - 箱子之形摆放(JS)
- c#后台List转为js对象(在前台操作)
- js跳出循环的方法区别(break,continue,return)(转载)
- JS判断指定dom元素是否在屏幕内的方法实例
- 理解js闭包10大使用场景,大厂面试官好自为之!
- Node.js 在命令行下执行Console.log()命令时,第二行会打印undefined的原因