js闭包

对于每一名web前端开发的人来讲,闭包,总是一个熟悉却又陌生的词汇。在这里谈一下我个人对js 闭包的认识,看法以及对闭包的理解。

1.什么是闭包:

1. 闭包是将一个函数定义在一个函数的内部,然后返回这个函数作为外部函数的返回值。
2. 闭包就是能够访问其他函数内部的变量,又因为在javascript中只有函数内部的子函数才能访问局部变量,所以说,
闭包也可以理解为:“定义在函数内部的函数”
3. 本质上闭包是将函数内部和函数外部联通起来。

来个列子:

function makeSizer(size) {
  //makesizer函数的返回值是下面的函数
  return function() {
    //此函数访问外部函数的变量
    console.log(size)
    };
}

var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);
size12();
size14();
size16();

//返回值
12
14
16

2.为什么要有闭包?

在js 中变量分为全局变量和局部变量,全局变量的作用域是全局作用域,局部变量的作用域为局部作用域。

JavaScript 局部变量特征:

变量在函数内声明,变量为局部作用域。局部变量:只能在函数内部访问。
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。

JavaScript 全局变量特征:

变量在函数外定义,即为全局变量。
全局变量有 全局作用域: 网页中所有脚本和函数均可使用。如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

综上,可以在函数内部访问全局变量,但是无法在全局环境中访问函数内部的变量。
显而易见,闭包就是为了解决在全局环境中可以访问函数内部的变量

3.闭包的优缺点

优点:

1.希望一个变量长期存储在内存中。
2.避免全局变量的污染。

缺点:

1.内存消耗,因为变量会保存在内存
2.使用不当会很容易造成内存泄露。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值