JS闭包的介绍与使用

作用域

  1. 在函数内部是可以读取到全局变量的
  var n1 = 12;
    function f1 () {
        alert(n1);
   }
    f1(); // 12
  1. 在函数外部访问不到函数内部声明的局部变量
   function f2() {
         var n2 = 12;
     }
     alert(n2);
  1. 闭包
    这里的f4 就是闭包
  function f3 () {
        var n3 = 12;

       function f4() {
            alert(n3);
        };

        return f4;

        // f4();
    }

    var res = f3();
    console.log(res);
    res();

闭包

闭包的定义 :
就是在函数内部声明一个函数, 这个函数可以访问函数内部声明的局部变量 那么这个函数就叫做闭包
理解 : 之后函数内部的子函数才可以访问函数内部声明的局部变量
全局变量:可以反复使用,随处可用(容易造成全局污染)
全局变量的生命周期:从变量声明开始到程序运行结束
局部变量:不可以重复使用,只在函数中使用
局部变量的生命周期 : 从变量声明开始到声明这个局部变量的函数执行完回收

     function f1() {
             var ranNum = Math.floor(Math.random() * 100);

            function f2() {
                console.log(ranNum);
            }
             return f2;
         }
        var fun = f1();
       fun();
       fun();

    f1()();
    f1()();


    function fun() {
        var num = 13;
    }
    console.log(num);

闭包的优点

可以使用重复变量有保护变量不被污染的一种机制。
需求 : 在函数外部访问函数内部的局部变量, 怎么访问?

//1.用外层函数包裹受保护的变量和操作变量的内层函数
function outer(){
	var i=1 
	//活动对象,函数作用域
	//2.外层函数将内层函数返回
	return function getNum(){
		console.log(i++);
	}
	
}
//3.使用者调用外层函数,获得内层函数的对象
var getNum=outer();
getNum();//1
getNum();//2
getNum();//3
getNum();//4

闭包的作用

1.提升局部变量的生命周期
全局变量的生命周期:从变量声明开始到程序运行结束
局部变量的生命周期 : 从变量声明开始到声明这个局部变量的函数执行完回收

function f1(){
	var num=12;
	function f2(){
		console.log(num);
	}
	return f2;
}
var res=f1();
res();

2.提供有限的访问权限

发布了26 篇原创文章 · 获赞 5 · 访问量 1056

猜你喜欢

转载自blog.csdn.net/weixin_45060872/article/details/104587594
今日推荐