js闭包

2019-06-25  本文已影响0人  Johnson23

1. 变量作用域

变量作用域两种:全局变量、局部变量。

在JS中(ES5),只有函数作用域,没有块级作用域!!!也就是说,if/for等有{}的结构体,并不能具备自己的作用域。(ES6提供了块级作用域,let、const)

所以,函数外部不能访问函数内部局部变量(私有属性)。因为,函数内部的变量,在函数执行完毕以后,就会被释放掉。(涉及js垃圾回收机制)

2. 如何从外部读取函数内部的变量?

function func1(){
  var a = 12
  function func2(){    // func2是一个闭包
    alert(a)
  }
  return func2
}

3.闭包的概念

能够读取其他函数内部变量的函数;
或简单理解为定义在一个函数内部的函数,内部函数持有外部函数内变量的引用。

4.闭包的用途

5.闭包的理解

function init() {
  var name = "Chrome";    //创建局部变量name和局部函数alertName

  function alertName() { //alertName()是函数内部方法,是一个闭包
      alert(name); //使用了外部函数声明的变量,内部函数可以访问外部函数的变量
  }
  alertName();
}
init();
function outFun(){
    var name = "Chrome";
    function alertName(){
        alert(name);
    }
    return alertName;   //alertName被外部函数作为返回值返回了,返回的是一个闭包
}

var myFun = outFun();
myFun();
function add(x){
    return function(y){
        return x + y;
    };
}

var addFun1 = add(4);
var addFun2 = add(9);

console.log(addFun1(2)); //6
console.log(addFun2(2));  //11

相关文章
对JS闭包的理解及常见应用场景
前端面试:谈谈 JS 垃圾回收机制
ES6 变量作用域与提升:变量的生命周期详解
关于JavaScript中的闭包及应用场景

上一篇 下一篇

猜你喜欢

热点阅读