当前位置: 首页 > article >正文

Javascript高级—闭包问题

闭包问题

循环中赋值为引用的问题

for (var i = 1; i < 5; i++) {
  setTimeout(function timer() {
    console.log(i)
  }, i * 1000)
}

解决方法有3种

第一种,使用立即执行函数方式

for (var i = 1; i < 5; i++) {
  (fuction(j){
    setTimeout(function timer() {
      console.log(j)
    }, j * 1000)
  })(i)
}

第二种,使用ES6的let

for (let i = 1; i < 5; i++) {
  setTimeout(function timer() {
    console.log(i)
  }, i * 1000)
}

第三种,使用setTimeout的第三个参数

for (var i = 1; i < 5; i++) {
  setTimeout(function timer(j) {
    console.log(j)
  }, i * 1000, i)
}

计数器

实现一个foo函数 可以这么使用:

a = foo();b = foo();c = foo();
// a === 1;b === 2;c === 3;
foo.clear();d = foo(); //d === 1;
function myIndex() {
    var index = 1;

    function foo(){
        return index++;
    }

    foo.clear = function() {
        index = 1;
    }
    return foo;
}

var foo = myIndex();

http://www.kler.cn/a/392285.html

相关文章:

  • 蓝桥杯每日真题 - 第7天
  • Linux第四讲:Git gdb
  • SpringSecurity源码中核心类
  • 云原生-docker安装与基础操作
  • 探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
  • 43.第二阶段x86游戏实战2-提取游戏里面的lua
  • 【JavaSE】(5)继承
  • 河南省的一级科技查新机构有哪些?
  • Linux redis-6.2.6安装
  • Spring Cloud Contract快速入门Demo
  • SwiftUI 高级开发教程系列 - 第 2 章:组合视图与修饰符
  • Linux python程序打包方式
  • MyBatis及相关文件配置
  • -bash: /home/xxx/anaconda3/bin/conda: No such file or directory
  • Leetcode 每日一题 12.整数转罗马数字
  • 云原生-docker安装与基础操作
  • C/C++中使用MYSQL
  • 基于STM32的智能门禁系统设计
  • 达梦数据库DM管理工具增删改不生效怎么办?如何设置事务自动提交?
  • 从0开始学习Linux——用户管理
  • 索引的工作流程与执行原理
  • 【Qt】QtCreator安装安卓环境
  • React Query在现代前端开发中的应用
  • Mysql高可用架构方案
  • 腾讯云产品推荐----轻量级云服务器
  • 重学 Android 自定义 View 系列(六):环形进度条