文档章节

闭包

LinearLaw
 LinearLaw
发布于 2017/04/24 21:34
字数 231
阅读 17
收藏 0

闭包,终于写出来了。

首先,我们必须要明白,js是单线程的!

js中的任务分为主要任务和次要任务。

次要任务(setTimeout setInterval..):先把所有的主要任务执行完毕,才会去执行次要任务的代码。

一般地,ajax、setTimeout、setInterval这些都是次要任务。

(1)原始代码,此时打印出来的只会是最后一次的i的值

       for(var i = 0; i < 10; i++){
           setTimeout(function(){
               console.log(i);
           }, 1000);
       }

(2)利用闭包后优化的代码

        for(var i = 0; i < 10; i++){
            function outer(){
                var j = i;
                function inner(){
                    console.log(j);
                }
                return inner;
            }
            var f = outer();
            setTimeout(f, 1000);
        }
//这时候就会打印0、1、2、3、4、5、6...这些了
//其实这段代码可以进一步优化

        for(var i = 0; i < 10; i++){
            setTimeout(function(j){
                //var j = i
                function inner(){
                    console.log(j);
                }
                return inner;
            }(i), 1000);
        }


(3)利用闭包优化斐波那契数列计算,结合缓存原理

——待更新

© 著作权归作者所有

共有 人打赏支持
LinearLaw
粉丝 4
博文 36
码字总数 43561
作品 0
深圳
个人站长
Swift 闭包

Swift.png 闭包 闭包是保存一段代码块,可以在代码中传递和是使用(类似Block) 闭包和block类似 闭包的表达式如下 闭包的函数体部分由关键字 in 引入。该关键字表示闭包的参数和返回值类型定...

追逐iOS
2017/11/27
0
0
【JavaScript】关于闭包

1、闭包是函数的代码在运行过程中的一个动态环境,是一个运行期的、动态的概念。 闭包(又称“词法闭包”或“函数闭包”)是一个包含了非本地变量引用环境的函数。 2、变量在语法分析阶段被初...

Aram
2013/03/17
0
0
Swift2.0语言教程之闭包

Swift2.0语言教程之闭包 Swift2.0语言闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift中的闭包与C和Objective-C中的代码块(blocks)以及其他一些编程语言中的Lambda函数比...

大学霸
2015/07/20
0
0
闭包block多种应用方式

闭包是一个十分强大的功能,灵活多变,便于使用;实际上闭包是一种匿名的函数. 其类型和对应的函数类型保持一致. 使用闭包,我们可以动态的改变函数或方法中的代码,从而适应不同环境下的要求. 1...

法斗斗
2016/06/22
4
0
深入理解javascript原型和闭包(完结)

说明:   该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分——原型和闭包,当然,肯定少不了原型链...

zh151832
2016/08/02
26
0

没有更多内容

加载失败,请刷新页面

加载更多

HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
11分钟前
0
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
43分钟前
1
0
php foreach

<?php// 数组的引用$a=array(1,2,3,4,5);foreach($a as $key=>&$value){$value=$value*2;}print_r($a);echo " $key -------------------$value\r\n";/** * ...

小张525
51分钟前
1
0
12-利用思维导图梳理JavaSE-多线程

12-利用思维导图梳理JavaSE-多线程 主要内容 1.线程概念 2.线程开发 3.线程的状态 4.线程的同步和死锁 5.Java5.0并发库类 QQ/知识星球/个人WeChat/公众号二维码 本文为原创文章,如果对你有一...

飞鱼说编程
今天
0
0
JAVA集合之ArrayList

一、前言 Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类,JAVA常用的集合接口有4类,分别是: Collection:代表一组对象,每一个对象都是它的子元素 Set:不包含重复元素...

木木匠
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部