美文网首页
4,作用域闭包

4,作用域闭包

作者: r8HZGEmq | 来源:发表于2020-08-07 16:45 被阅读0次
var data=[];
for(var i=0; i<3; i++){
    data[i] = function(){ console.log(i); }
}
data[1]();
没有块级作用域

因为data数组中存了3个function,每个function执行时,需要用到i,但是自己的作用域内没有,
向上查找【AO,globalContext.VO】所以都为3.

但是如果改成let i......(块级作用域)
或者
包装成自执行函数 【AO,匿名函数的AO,globalContext.VO】
data[i]=(....)(i)  function(i){return function(){ 打印i }}
作用域虽然pop了,但是作用域链的对象被依赖了,所以还在
闭包:红宝书P178:有权访问另外一个函数作用域中的变量的函数

var myCounter1 = createCounter(100);
var myCounter2 = createCounter(200);

function createCounter(val){
  var counter = val;  闭包-存储私有变量
  function increment(value){ counter += value}
  function get(){ return counter; }
  return {increment, get}
}
会创建2个不同的作用域scope对象:myCounter1 和 myCounter2

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}

var foo = checkscope(); foo指向函数f
foo();                  调用函数f()

步骤:
1,创建全局context,压入堆栈,初始化(this、变量、原型链等)
2,创建checkscope的context,压栈,初始化。执行完毕,弹出。
3,创f,压栈,init,exec,pop

问题来了:
为什么2弹出了,3依赖2的变量还能访问到
3维持着一个作用域链数组内有2的活跃对象,即使context2弹出但js继续维持着context2

相关文章

  • 作用域和闭包

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

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

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

  • 作用域、匿名函数、闭包

    1、//作用域的概念 2、 //匿名函数 3、//闭包 4、//用闭包解决

  • js作用域、闭包

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

  • javaScript门道之闭包

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

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

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

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

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

  • js 总结七07-19

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

  • 2023-01-12

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

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

网友评论

      本文标题:4,作用域闭包

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