javaScript"闭包" - (实例理解)

闭包是什么

闭包就是能够读取其他函数内部变量的函数。—— 阮一峰

在JavaScript中,函数A内部的局部变量不能被A以外的函数访问到,只能被A内部的子函数B访问到,当在函数A外调用函数B时,便可通过B访问A中局部变量,那么子函数B就是闭包。(注意,是子函数哦~)

举个栗子:

function outer() {
   

    var a = 100; // outer的局部变量

    function inner() {
    // 闭包
        console.log(a);
    }

    return inner; // 没有这条语句,闭包起不到在outer外部访问变量a的作用~
}
console.log(a); // 在外部直接访问a出错,Uncaught ReferenceError: a is not defined

var test = outer(); // outer运行完返回inner,赋值给test
test(); // 100,执行test(),相当于执行inner(),这样就可以访问到outer内部的a了

简单来说,闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁。周爱民说得更清楚,闭包就是“属性表”,闭包就是一个数据块,闭包就是一个存放着“Name=Value”的对照表。就这么简单。但是,必须强调,闭包是一个运行期概念。—— 司徒正美

闭包的原理

根编译原理知识,编程语言主要分为两类:

{
    "编译形":  c/c++,
    "解释形":  javascript 
}

“编译形(C/C++、java )” 是全部代码必须整体正确通过编译后才可以运行.。[代码整体为单位完全编译]、[先编译后运行]
“解释形(javascript)”是一边编译一边运行,代码是逐行解释运行。[代码按最小单位:表达式|语句解释运行]、[编译运行先同时]

说原理可能有些大,但这部分确实是要从内部机制的角度,解释下“为什么上面的栗子中通过inner就可以在outer外部访问outer内部的a
javascript是没有块级作用域的 但是具有全局作用和函数内部运行时作用域
在JS中,有两个链很重要:原型链作用域链。通过 原型链 可以实现继承,而与

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值