首页 >> js开发 >> jsJS闭包原理及其使用场景解析js大全
jsJS闭包原理及其使用场景解析js大全
发布时间: 2021年1月13日 | 浏览:
| 分类:js开发
闭包定义
闭包定义可以通过内层函数访问外层函数的作用域的组合叫做闭包。闭包使用场景
闭包使用场景
使用闭包来实现防抖
function debounce(callback, time) {
var timer;
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
callback()
}, time)
}
}
window.onresize = debounce(() => {console.log(666)},500)
function debounce(callback, time) {
var timer;
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
callback()
}, time)
}
}
window.onresize = debounce(() => {console.log(666)},500)使用闭包设计单例模式
使用闭包设计单例模式
class Car{
constructor(color){
this.color = color
}
}
var proxy = (function createCar() {
var instance;
return function (color) {
if (!instance) {
instance = new Car(color)
}
return instance
}
})()
var car = proxy('white')
class Car{
constructor(color){
this.color = color
}
}
var proxy = (function createCar() {
var instance;
return function (color) {
if (!instance) {
instance = new Car(color)
}
return instance
}
})()
var car = proxy('white')使用闭包遍历取索引值(古老的问题)
使用闭包遍历取索引值(古老的问题)
for (var i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)},0) //10个10
}
for (var i = 0; i < 10; i++) {
(function(j){
setTimeout(function(){console.log(j)},0) // 0 - 9
})(i)
}
for (var i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)},0) //10个10
}
for (var i = 0; i < 10; i++) {
(function(j){
setTimeout(function(){console.log(j)},0) // 0 - 9
})(i)
}闭包性能
闭包性能因为闭包会使外层函数作用域中的变量被保存在内存中不被回收,所以如果滥用闭包就会导致性能问题,谨记。以上就是本文的全部内容,希望对大家的学习有所帮助。
闭包定义可以通过内层函数访问外层函数的作用域的组合叫做闭包。闭包使用场景
闭包使用场景
使用闭包来实现防抖
function debounce(callback, time) {
var timer;
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
callback()
}, time)
}
}
window.onresize = debounce(() => {console.log(666)},500)
function debounce(callback, time) {
var timer;
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
callback()
}, time)
}
}
window.onresize = debounce(() => {console.log(666)},500)使用闭包设计单例模式
使用闭包设计单例模式
class Car{
constructor(color){
this.color = color
}
}
var proxy = (function createCar() {
var instance;
return function (color) {
if (!instance) {
instance = new Car(color)
}
return instance
}
})()
var car = proxy('white')
class Car{
constructor(color){
this.color = color
}
}
var proxy = (function createCar() {
var instance;
return function (color) {
if (!instance) {
instance = new Car(color)
}
return instance
}
})()
var car = proxy('white')使用闭包遍历取索引值(古老的问题)
使用闭包遍历取索引值(古老的问题)
for (var i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)},0) //10个10
}
for (var i = 0; i < 10; i++) {
(function(j){
setTimeout(function(){console.log(j)},0) // 0 - 9
})(i)
}
for (var i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)},0) //10个10
}
for (var i = 0; i < 10; i++) {
(function(j){
setTimeout(function(){console.log(j)},0) // 0 - 9
})(i)
}闭包性能
闭包性能因为闭包会使外层函数作用域中的变量被保存在内存中不被回收,所以如果滥用闭包就会导致性能问题,谨记。以上就是本文的全部内容,希望对大家的学习有所帮助。
相关文章:
- js小程序角标的添加及绑定购物车数量进行实时更新的实现代码js大全
- jsVue+element-ui添加自定义右键菜单的方法示例js大全
- jsvuex Module将 store 分割成模块的操作js大全
- jsvue使用echarts图表自适应的几种解决方案js大全
- js代码JavaScript中的几种继承方法示例
- jselement中Steps步骤条和Tabs标签页关联的解决js大全
- js解决vue下载后台传过来的乱码流的问题js大全
- jsecharts浮动显示单位的实现方法示例js大全
- jsVue如何实现验证码输入交互js大全
- js简单谈谈offsetleft、offsetTop和offsetParentjs大全