js closures all in one

setTimeout 闭包,log(i, arr[¡])

var, let, closures, IIFE

"use strict";

/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-09-30
* @modified
*
* @description closures 闭包
* @difficulty Easy
* @complexity O(n)
* @augments
* @example
* @link
* @solutions
*
* @best_solutions
*
*/ const log = console.log; // setTimeout 闭包,log(i, arr[¡]) const arr = ["A", "B", "C"]; // var
for (var i = 0; i < arr.length; i++) {
if(i == 0) {
log(`var bug`);
}
setTimeout(() => {
log(`i =`, i, `arr[${i}] =`, arr[i]);
}, 1000);
} // IIFE
for (var i = 0; i < arr.length; i++) {
((i) => {
setTimeout(() => {
if(i == 0) {
log(`\nIIFE`);
}
log(`i =`, i, `arr[${i}] =`, arr[i]);
}, 1000);
})(i);
} // closures
for (var i = 0; i < arr.length; i++) {
function test(i) {
setTimeout(() => {
if(i == 0) {
log(`\nclosures`);
}
log(` i =`, i, `arr[${i}] =`, arr[i]);
}, 1000);
}
test(i);
} // let
for (let i = 0; i < arr.length; i++) {
setTimeout(() => {
if(i == 0) {
log(`\nlet`);
}
log(`i =`, i, `arr[${i}] =`, arr[i]);
}, 1000);
} /* $ node closures.js var bug
i = 3 arr[3] = undefined
i = 3 arr[3] = undefined
i = 3 arr[3] = undefined IIFE
i = 0 arr[0] = A
i = 1 arr[1] = B
i = 2 arr[2] = C closures
i = 0 arr[0] = A
i = 1 arr[1] = B
i = 2 arr[2] = C let
i = 0 arr[0] = A
i = 1 arr[1] = B
i = 2 arr[2] = C */

for & log

"use strict";

/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-16
* @modified
*
* @description for & log
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link
* @solutions
*
* @best_solutions
*
*/ const log = console.log; const len = 3; for (var i = 0; i < len; i++) {
setTimeout(() => {
log(` i =`, i);
}, 0);
} // ES6 let
for (let j = 0; j < len; j++) {
setTimeout(() => {
if(j === 0) {
log(`\n`);
}
log(` j =`, j);
// if(j === len - 1) {
// log(`\n`);
// }
}, 0);
} // IIFE
for (var k = 0; k < len; k++) {
(function(k) {
setTimeout(() => {
if(k === 0) {
log(`\n`);
}
log(` k =`, k);
}, 0);
})(k);
} // 闭包 closure
for (var l = 0; l < len; l++) {
function test(l) {
setTimeout(() => {
if(l === 0) {
log(`\n`);
}
log(` l =`, l);
}, 0);
}
test(l);
} /* $ node for-var-closures.js i = 3
i = 3
i = 3 j = 0
j = 1
j = 2 k = 0
k = 1
k = 2 l = 0
l = 1
l = 2 */

refs



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有️xgqfrms, 禁止转载 ️,侵权必究️!


js closures all in one的更多相关文章

  1. You Don't Know JS: Scope & Closures (第一章:什么是Scope)

    Content What is Scope? Lexical Scope Function Vs. Block Scope Hoisting Scope Closures Appendix: Dyna ...

  2. You Don't Know JS: Scope & Closures(翻译)

    Chapter 1: What is Scope? 第一章:什么是作用域 One of the most fundamental paradigms of nearly all programming ...

  3. js的closures(闭包)

    JS中的闭包(closure) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面就是我的学习笔记,对于Javascript初学者应该是很有用 ...

  4. You Don't Know JS: Scope & Closures (第4章: Hoisting)

    Chapter4: Hoisting 变量附加到哪个层次的scope,由它们在哪里和如何声明(let, var)来决定. Function scope/Block scope都有相同的法则:任何变量在 ...

  5. You Don't Know JS: Scope & Closures (第3章: 函数 vs 块作用域)

    第二章,作用域由一系列的bubbles组成.每一个都代表了一个container或bucket,装着被声明的identifiers(variables, functions).这些bubbles相互嵌 ...

  6. You Don't Know JS: Scope & Closures (第2章: Lexical Scope)

    2种主要的models for how scope work. 最普遍的是Lexical Scope. 另一种 Dynamic Scope.(在Appendix a中介绍.和Lexical Scope ...

  7. You Don't Know JS: Scope & Closures (附加:Lexical/dynamic作用域)(附加:Lexical-this)

    JavaScript只有Lexical Scope 模式 Lexical Scope就是在写代码的时候,定义函数的时候创建的作用域! 而动态作用域是在runtime时,函数被调用的地方的作用域! 实际 ...

  8. (未完成👃)You Don't Know JS: Scope & Closures (第5章: Scope & Closures)

    Chapter 5: Scope Closure 我们到达这里时,已经对作用域如何工作有了非常健康稳固的理解. 下面,我们转移注意力到一个及其重要,但长期难以理解,几乎是神话中的部分语言:Closur ...

  9. (翻译)《Hands-on Node.js》—— Why?

    事出有因 为何选择event loop? Event Loop是一种推进无阻塞I/O(网络.文件或跨进程通讯)的软件模式.传统的阻塞编程也是用一样的方式,通过function来调用I/O.但进程会在该 ...

随机推荐

  1. SpringMVC 中 @ControllerAdvice 注解

    SpringMVC 中 @ControllerAdvice 注解 1.@ControllerAdvice 1.1 全局异常处理 1.2 全局数据绑定 1.3 全局数据预处理 原文地址: 江南一点雨:S ...

  2. Spring Cloud,Docker书籍资源、优秀博文等记录

    Spring Cloud,Docker书籍资源.优秀博文等记录 Spring Cloud,Docker书籍资源.优秀博文等记录 一.书籍 二.博文地址 三.思维导图Or图片 3.1一张图总结 Dock ...

  3. Golang之如何(优雅的)比较两个未知结构的json

    这是之前遇到的一道面试题,后来也确实在工作中实际遇到了.于是记录一下,如何(优雅的)比较两个未知结构的json. 假设,现在有两个简单的json文件. { "id":1, &quo ...

  4. hadoop的Namenode HA原理详解

    为什么要Namenode HA? 1. NameNode High Availability即高可用. 2. NameNode 很重要,挂掉会导致存储停止服务,无法进行数据的读写,基于此NameNod ...

  5. Filter过滤器除去部分URL链接

    在web.xml中配置的Filter如下: <filter> <filter-name>HazardousParametersFilter</filter-name> ...

  6. (3)UNIX/Linux系统结构

    UNIX/Linux 系统可以粗糙地抽象为 3 个层次,如图所示.底层是 UNIX/Linux 操作系统,即系统内核(Kernel):中间层是Shell层,即命令解释层:高层则是应用层. 1) 内核层 ...

  7. 数理统计4:均匀分布的参数估计,次序统计量的分布,Beta分布

    接下来我们就对除了正态分布以外的常用参数分布族进行参数估计,具体对连续型分布有指数分布.均匀分布,对离散型分布有二项分布.泊松分布几何分布. 今天的主要内容是均匀分布的参数估计,内容比较简单,读者应尝 ...

  8. OsgEarth开发笔记(一):Osg3.6.3+OsgEarth3.1+vs2019x64开发环境搭建(上)

    前言   OSG研究之后,做地理GIS显示了地球:<项目实战:Qt+OSG教育学科工具之地理三维星球>,这一文章是基于OSG做的,而基于OsgEarth是可以进一步对地球进行深度操作,所以 ...

  9. 从零开始教你安装Oracle数据库

    1.数据库安装 1.1下载 根据自己的操作系统位数,到oracle官网下载(以oracle 11g 为例) 之后把两个压缩包解压到同一个文件夹内(需要注意的是,这个文件夹路径名称中最好不要出现中文.空 ...

  10. zjnu1181 石子合并【基础算法・动态规划】——高级

    Description 在操场上沿一直线排列着  n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆,  并将新的一堆石子数记为该次合并的得分.允许在第一次合并前对调一 ...