一.js高级(7)-闭包2

要理解闭包的概念,先了解js执行函数的过程: 

  js在执行函数作用域之前,会将所有的变量按照 local global , closure 分类声明

    1)  var 声明的变量赋值 undeifned

    2)  function func() {}  形式定义的函数放在 Functions 中, function 在js中是一级对象,他可以拥有属性和方法,无论任何情况下都会有返回值; 当用new形式加载function时, 返回this; 其他除了显性定义 return, 返回值都是undefined;

    3)  当js碰到每个每个函数作用域, 在声明函数作用域的本地变量的同时, 为所在函数的体内引用到的外界变量创建 closure; 在closure里面存储的变量有个神奇的地方: 它会对他内部所有的代码检查是否存在引用上下文变量的情况,如果存在,就将它引入 closure; (也可以看出为什么递归在js中国容易出现栈溢出的情况)

    

function say6() {
        //局部变量num最后会保存在闭包中
        var num = 10;
        var say = function () {
            console.log(num);
        }
        num++;
        return say;

    }
    var sayNum = say6();
    sayNum();//11
原文地址:https://www.cnblogs.com/noraZhang/p/10110961.html