美文网首页我爱编程
Javascript 学习(闭包)

Javascript 学习(闭包)

作者: Cats_eat_fish | 来源:发表于2018-04-13 14:13 被阅读0次

js闭包

js中的闭包问题是由函数变量的作用域引出的,全局变量和局部变量的概念和Java感觉没有太大的区别,但是如果要在js中实现Java中的私有变量效果,就引出了js闭包。

全局变量

在js中全局变量是指在function外部声明的变量,或者在function内部没有通过var声明的变量;
全局变量的生命周期是全局性的,即:在整个js文件中都可以调用。

例如:
var a = 0;//全局变量
function myfunction(){
    b = 0;//全局变量
    //这里可以访问a;
    return a + b;
}

局部变量

在js中局部变量是指在function内部通过var生命的变量;
局部变量的生命周期是局部性的,也就是只有在其声明的function中才可以调用。

例如:
var a = 0;//全局变量
function myfunction(){
    var b = 0;//局部变量
    //这里可以访问a
    return a + b;
}
//但是在myfunction()外部不能访问b

私有化需求

现在好多地方都会有计数器的需求;
通常我们可以通过定义全局变量的方式来实现;

例如:
var count = 0;
funtion add(){
    retutn ++count;
}

这样看着是实现了我们想要的功能,但是这样的话count变量是一个全局变量,所有的function都可以访问这个变量,不安全;
但是局部变量又不能满足我们的需求;

例如:
function add(){
    var count = 0;
    return ++count;
}

这样每次的返回结果都是1,不是我们想要的;
在js中每个function都可以访问他上一层声明的变量,

例如:
function func1(){
    var a = 0;
    var b = function (){
        //这里可以访问变量a
        return a++;
    }
    //这里调用b() 变量a会增加1;
    b();
}

这样把上边的方法简单修改就可以了

例如:
var b = (function (){//function A
    var count = 0;
    return function(){//function B
        return ++count;
    }
})();
//每次调用b()count就会增加1后返回
var c = b();

这样最后变的()意思为调用了functionA,即:b依赖的不是functionA 而是functionA的返回值function B,
在需要的地方直接调用b()就可以了
这样count就变成了只有b()能访问到的私有变量了,这就是js中的闭包。

相关文章

  • 闭包

    学习Javascript闭包(Closure)

  • JavaScript深入理解-闭包(Closure)

    推荐文章:学习Javascript闭包(Closure)- 阮一峰javascript深入理解-从作用域链理解闭包...

  • 笔记:JavaScript闭包

    本文摘录及参考自:1. 学习Javascript闭包(Closure)2. 闭包的秘密3. JavaScript ...

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • JavaScript闭包学习笔记

    @(JS技巧)[闭包] JavaScript闭包学习笔记 什么是闭包? 有些情况下,函数调用完成之后,其执行上下文...

  • 轻松理解JavaScript闭包

    闭包机制是JavaScript的重点和难点,本文希望能帮助大家轻松的学习闭包 一、什么是闭包? 闭包就是可以访问另...

  • 初识JavaScript闭包

    前言: 学习JavaScript的时候老是听说闭包,感觉他很厉害的样子,所以就来会会他吧! 闭包是什么? 闭包是指...

  • JavaScript学习笔记(4) 闭包详解(Closure A

    《JavaScript学习笔记(4) 闭包详解(Closure Are Not Magic)》 ---- 写在开头...

  • js经典题目

    1闭包 链接:学习Javascript闭包(Closure) setTimeout在js单线程中只是放在队列中并未...

网友评论

    本文标题:Javascript 学习(闭包)

    本文链接:https://www.haomeiwen.com/subject/vdcckftx.html