闭包和闭包的应用场景

定义

闭包指的是函数与定义该函数环境的组合。比如下面函数,函数foo和变量name是函数fn1的局部作用域中,fn1执行后把函数foo返回给fn2全局变量,这样就形成了一个闭包。这个闭包的函数是foo,而环境则是之前执行fn1时产生的局部作用域。

function fn1() {
    var name = "zhangsan";
    function foo() {
        console.log(name);
    };
    return foo;
}
var fn2 = fn1();

应用

私有化变量:

函数的每次执行产生闭包,他们里面的变量只有该闭包可访问。

定时器例子: counter1, counter2的每次执行都会使他们自己的count自增,从而各自记录执行的次数而不相互干扰。

function createCounter() {
    var count = 0;
    var counter = function() {
        count++;
        console.log("执行第" + count + "次");
    }
}
var counter1 = createCounter();
var counter2 = createCounter();
counter1();  // 执行第1次
counter1();  // 执行第2次
counter2();  // 执行第1次
counter1();  // 执行第3次

立即执行函数实现块级作用域

为了避免全局中出现过多不必要的变量,造成潜在的变量污染的风险,可以使用立即执行函数来实现块级作用域

例:如下,只需要一次性计算1加到100并输出到consolle。这样可以在执行完立即销毁变量。

(function(){
    var i = 0;
    var sum = 0;
    for (; i <= 100; i++) {
        sum += i;
    }
    console.log(sum);
})()

原文地址:https://www.cnblogs.com/ykli/p/9737483.html

时间: 2024-08-28 20:37:44

闭包和闭包的应用场景的相关文章

python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器

## 复习 '''1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值  eg:fn()() => fn的返回值一定是函数使用:1)直接被其他变量接收 - 将函数的内存地址直接给其他变量 => 被赋值的变量也是函数对象2)可以作为函数的参数 - 函数的形参接收到的实参是函数对象 => 形参被赋值后也是函数对象3)可以作为函数的返回值 - 用变量在外界调用并接受这个函数的值 => 用来接收

闭包的理解和应用场景

1.什么是闭包?? 在了解闭包之前,我们要清楚js的另一个知识,那就是作用域链.什么是作用域链,比如一个函数里面包含着另一个函数,里面的函数在使用一个变量的时候会在函数自己的作用域内去查找这个变量,如果没有,就会沿着作用域链向上级函数的作用域去查找,这样的一个过程我们就叫做作用域链. 作用域链是可以有函数内部向外部去查找使用需要的变量,但是无法从上到下去查找函数内部的变量,所以这时候就出现了闭包,闭包就是解决这一问题.简单来说,闭包就是一个可以访问另一个函数内部变量的函数. 1 function

JavaScript闭包中闭包函数this的指向

阅读文章前, 请先阅读阮一峰老师的这篇文章http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 前人写过的, 而且写得很好, 就没必要重复下去了. 只加一些阮老师的文章里没有说的.顺便总结一下. 引用一句话: "闭包就是functions that return function"(出处已经忘记啦) 闭包的类型: 循环闭包, 函数闭包 闭包的特点: 外部访问函数内部的值, 函数内部变量不被回收

全面理解Javascript闭包和闭包的几种写法及用途

一.什么是闭包和闭包的几种写法和用法                                                       1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态. 2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区. 简单的说,Javascript允许使用内部函数---即函数定义和函数表

转 全面理解Javascript闭包和闭包的几种写法及用途

转自:http://www.cnblogs.com/yunfeifei/p/4019504.html 好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途. 一.什么是闭包和闭包的几种写法和用法                                                       1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑

javascript中的闭包以及闭包应用

闭包简单理解就是能够读取其他函数内部变量的函数,而在javascript中只有内部函数可以读取函数的内部变量,所以我们学习javascript时可以这样理解,函数A中嵌套了一个函数B,然后我们用函数B来取得函数A的内部变量,那么这个函数B就是一个闭包. 闭包的实质就是将函数内部和外部链接起来的桥梁. function A(){ var n=2; function B(){ alert(2); } return B; } var result=A(); result(); 闭包的主要用途: 1.获

什么是闭包?闭包的优缺点

什么是闭包?闭包的优缺点? 闭包(closure)是javascript的一大难点,也是它的特色.很多高级应用都要依靠闭包来实现. 1.变量作用域 要理解闭包,首先要理解javascript的特殊的变量作用域. 变量的作用域无非就两种:全局变量和局部变量. javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量. 注意点:在函数内部声明变量的时候,一定要使用var命令.如果不用的话,你实际上声明的是一个全局变量! 2.如何从外部读取函数内

swift闭包_002_swift闭包

//: Playground - noun: a place where people can play import UIKit //-----闭包-------// //是独立的代码块,可以代码中进行传递和使用 //swift中的闭包和OC中的block相似 //函数是一种特殊的闭包,是有名称的闭包 //1.基本使用 /* 闭包的语法: { (参数1,参数2) -> 返回值类型 in 闭包的代码 } */ func add(a:Int, b:Int) -> Int { return a +

Javascript闭包和闭包的几种写法及用途

好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态. 2. 一个闭包就是当一个函数返回时,一个没有释放

全面理解Javascript闭包和闭包的几种写法及用途【转】

一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态. 2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区. 简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内.而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数和声明的