美文网首页
JS作用域链/闭包

JS作用域链/闭包

作者: Cheney_9f51 | 来源:发表于2020-05-18 17:41 被阅读0次

笔记参考(或摘录):
深入理解javascript原型和闭包(13)-【作用域】和【上下文环境】
深入理解javascript原型和闭包(14)——从【自由变量】到【作用域链】
深入理解javascript原型和闭包(15)——闭包
JavaScript深入之作用域链

作用域链理解

当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。

作用域链只能往外找(往父级)

//例1
 let a = 10;
 function foo(y) {
    // console.log(x); //Uncaught ReferenceError: x is not defined
     console.log(a); //10
     (function fn() {
          let x = 10;
          console.log(y); //20
      })();
 }
 foo(20);

如果要查找一个作用域下某个变量的值,就需要找到这个作用域对应的执行上下文环境,再在其中寻找变量的值。同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。

image.png

闭包理解

闭包指有权访问另一个函数作用域中的变量的函数,即外部可以访问函数内部的局部变量

闭包特点:外层函数内嵌套内层函数,且外层函数返回需要返回内层函数

用途:1)读取函数内部变量(即函数作为返回值); 2)让外层函数的变量保留在内存中(函数可作为参数进行传递)

闭包优点:有利于封装,可以访问局部变量;
闭包缺点:内存占用浪费严重,内存泄露

具体例子:

深入理解javascript原型和闭包(15)——闭包

相关文章

  • js作用域、闭包

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

  • JS基础知识:变量对象、作用域链和闭包

    JS基础知识:变量对象、作用域链和闭包 前言:这段时间一直在消化作用域链和闭包的相关知识。之前看《JS高程》和一些...

  • 闭包

    一、理解闭包前js基础1、作用域链(作用域、作用域链中有说)。2、js的内存回收机制。一个函数在执行开始的时候,会...

  • js 总结七07-19

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

  • JavaScript 函数闭包(colsure)

    理解闭包,你首先必须理解JS的变量作用域,JavaScript作用域和作用域链。 ES6之前,变量的作用域分为全局...

  • 2023-01-12

    变量提升调用栈块级作用域作用域链和闭包 闭包 => 作用域链(词法作用域) => 调用栈(栈溢出) => 上下文...

  • JS博客

    JS构造函数及new运算符 JS原型对象和原型链 函数作用域和作用域链 干货分享:让你分分钟学会JS闭包 深入理解...

  • js函数中的this

    前两篇文章“执行环境和作用域”和“js中的闭包”,我对谈了执行环境、作用域、作用域链和闭包的理解。但当牵涉到对象中...

  • 前端知识点汇总

    一、 JS高级 1.作用域/作用域链 2.原型/原型链 3.闭包 4.This指向call/apply 5.jav...

  • JavaScript 作用域链及闭包

    作用域链及闭包

网友评论

      本文标题:JS作用域链/闭包

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