美文网首页前端工程狮
作用域与闭包的基本概念

作用域与闭包的基本概念

作者: tomzhangto | 来源:发表于2017-12-18 18:58 被阅读0次

If you can't explain it to a six-year-old, you really don't understand it yourself.

闭包(closure)是JavaScript语言的一个难点,也是JavaScript的一个特色,很多高级的应用都要依靠闭包来实现。

作用域

在js中,函数会形成函数作用域,在函数内部可以直接访问全局变量

varstr="zs";

functionfn(){

console.log(str);//访问全局变量

}

fn();//zs

在函数外部却无法访问函数内部的变量

functionfn(){

varstr="zs";

}

fn();

console.log(str);//报错 str is not defined

问题:我怎么才能获取到函数内部的变量?

作用域链

在函数内部有一个函数,那么函数内部的函数是可以访问到外部函数的变量的。

解决方法:

functionfn(){

varstr="zs";

functionf2(){

console.log(str);

}

f2();

}

fn();

在上述代码中,fn中定义的所有变量,对于f2函数都来都是可以访问的。但是现在f2在函数的内部,我们如何在外部访问到f2这个函数呢?

functionfn(){

varstr="zs";

functionf2(){

console.log(str);

}

returnf2;

}

varresult=fn();

result();// "zs"

闭包的概念

上面代码中的f2就是闭包,闭包就是能够读取到其他函数内部变量的函数。因此我们可以把闭包理解为定义在函数内部的函数;

闭包是函数内部与外部连接起来的桥梁。

闭包的应用

计数器

需求:统计一个函数的调用次数

varcount=0;

functionfn(){

count++;

console.log("我被调用了,调用次数是"+count);

}

fn();

fn();

fn();

缺点:count是全局变量,不安全。

使用闭包解决这个问题!!!!

functionouter(){

varcount=0;

functionadd(){

count++;

console.log("当前count"+count);

}

returnadd;

}

varresult=outer();

result();

私有变量

使用闭包实现私有变量的读取和设置

functionouter(){

varnum=10;

functionset_num(n){

num=n;

}

functionget_num(){

returnnum;

}

return{

set_num:set_num,

get_num:get_num

}

}

varobj=outer();

obj.set_num(2000);

console.log(obj.get_num());

相关文章

  • 14.JS基础之作用域与闭包

    作用域: 全局作用域 函数作用域 块级作用域(ES6新增) 常见的闭包有:作为函数返回值的闭包与作为函数参数的闭包...

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • 2018-01-07 关于javascript闭包和作用域的理解

    关于 javascript 闭包的一些思考 作用域 词法作用域 函数作用域 块作用域 闭包 什么是作用域? 作用域...

  • javaScript门道之闭包

    闭包的学习路径:变量的作用域 -> 闭包的概念 ->闭包的应用 1.变量的作用域 变量的作用域分为作用于全局和作用...

  • js作用域、闭包

    闭包 闭包作用 全局 局部 作用域链

  • 闭包和高阶函数学习笔记

    一、闭包 闭包的形成与变量的作用域以及变量的生存周期密切相关。 1.1 变量的作用域 变量的作用域:指变量的有效范...

  • javascript中的闭包

    闭包 基本概念 当 内部函数 被保存到 外部 时,将会一定生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。...

  • 执行环境 & 作用域 & 闭包

    执行环境 & 作用域 & 闭包 执行环境 , 作用域 , 闭包 , 闭包应用 执行环境 执行环境定义了 当前环境的...

  • 作用域、作用域链、闭包、面向对象、执行上下文

    作用域 作用域链 函数的提前声明 闭包 JavaScript 闭包与类(原型链)之间的开发方式 构造函数和普通函数...

  • 你不懂JS:作用域与闭包

    你不懂JS:作用域与闭包 第五章:作用域闭包 希望我们是带着对作用域工作方式的健全,坚实的理解来到这里的。 我们将...

网友评论

    本文标题:作用域与闭包的基本概念

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