js closures all in one
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的更多相关文章
- You Don't Know JS: Scope & Closures (第一章:什么是Scope)
Content What is Scope? Lexical Scope Function Vs. Block Scope Hoisting Scope Closures Appendix: Dyna ...
- You Don't Know JS: Scope & Closures(翻译)
Chapter 1: What is Scope? 第一章:什么是作用域 One of the most fundamental paradigms of nearly all programming ...
- js的closures(闭包)
JS中的闭包(closure) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面就是我的学习笔记,对于Javascript初学者应该是很有用 ...
- You Don't Know JS: Scope & Closures (第4章: Hoisting)
Chapter4: Hoisting 变量附加到哪个层次的scope,由它们在哪里和如何声明(let, var)来决定. Function scope/Block scope都有相同的法则:任何变量在 ...
- You Don't Know JS: Scope & Closures (第3章: 函数 vs 块作用域)
第二章,作用域由一系列的bubbles组成.每一个都代表了一个container或bucket,装着被声明的identifiers(variables, functions).这些bubbles相互嵌 ...
- You Don't Know JS: Scope & Closures (第2章: Lexical Scope)
2种主要的models for how scope work. 最普遍的是Lexical Scope. 另一种 Dynamic Scope.(在Appendix a中介绍.和Lexical Scope ...
- You Don't Know JS: Scope & Closures (附加:Lexical/dynamic作用域)(附加:Lexical-this)
JavaScript只有Lexical Scope 模式 Lexical Scope就是在写代码的时候,定义函数的时候创建的作用域! 而动态作用域是在runtime时,函数被调用的地方的作用域! 实际 ...
- (未完成👃)You Don't Know JS: Scope & Closures (第5章: Scope & Closures)
Chapter 5: Scope Closure 我们到达这里时,已经对作用域如何工作有了非常健康稳固的理解. 下面,我们转移注意力到一个及其重要,但长期难以理解,几乎是神话中的部分语言:Closur ...
- (翻译)《Hands-on Node.js》—— Why?
事出有因 为何选择event loop? Event Loop是一种推进无阻塞I/O(网络.文件或跨进程通讯)的软件模式.传统的阻塞编程也是用一样的方式,通过function来调用I/O.但进程会在该 ...
随机推荐
- 超微服务器重置ipmi登录密码
超微服务器的ipmi登录密码不对,需要重置但是bios内并没有找到可以设置的选项. 以下是解决办法: 安装IPMITOOLyum install ipmitool -y 执行以下命令加载模块:modp ...
- 在这个示例中,使用 watch 选项允许我们执行异步操作 (访问一个 API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。
在这个示例中,使用 watch 选项允许我们执行异步操作 (访问一个 API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态.这些都是计算属性无法做到的.
- 游戏中的AOI(Area of Interest)算法
游戏中的AOI(Area of Interest)算法 游戏的AOI算法应该算作游戏的基础核心了,许多逻辑都是因为AOI进出事件驱动的,许多网络同步数据也是因为AOI进出事件产生的.因此,良好的AOI ...
- Redis 实战 —— 10. 实现内容搜索、定向广告和职位搜索
使用 Redis 进行搜索 P153 通过改变程序搜索数据的方式,并使用 Redis 来减少绝大部分基于单词或者关键字进行的内容搜索操作的执行时间. P154 基本搜索原理 P154 倒排索引 (in ...
- 拓扑排序(topo sort)之 最大食物链计数( 洛谷P4017)
前言: 复习复习拓扑排序,自己把自己弄没了/kk 题目传送门 简化题意: 在一个DAG中,求从所有入度为0的点到所有出度为0的点路径的条数 md理解错题意把自己卡了半天,生物学的好的就可以直接理解为求 ...
- 一次SQL盲注记录
背景:遇到一个sql注入,数字型布尔盲注+waf(直接超时那种),只要能出用户名,数据库名即可. 解决办法: 因为可以只要能出user(),database()即可,所以用不着SELECT,那么问题就 ...
- 三:SpringBoot-配置系统全局异常映射处理
三:SpringBoot-配置系统全局异常映射处理 1.异常分类 1.1 业务异常 1.2 系统异常 2.自定义异常处理 2.1 自定义业务异常类 2.2 自定义异常描述对象 2.3 统一异常处理格式 ...
- MySql(二)索引的设计与使用
MySql(二)索引的设计与使用 一.索引概述 二.设计索引的原则 三.BTREE索引与HASH索引 一.索引概述 所有Mysql列类型都可以被索引,对相关列使用索引时提高select操作性能的最佳途 ...
- Java8种排序算法学习
冒泡排序 public class test { public static void main(String[] args) { // TODO Auto-generated method stub ...
- (29)Vim 5
Vim显示行号方法详解1.编辑时显示行号 在命令模式下输入":set nu"即可显示每一行的行号 如果想要取消行 号,则再次输入":set nonu"即可.2. ...