6.2 闭包

定义

能够读取其他函数内变量的函数

本质

将函数内部和函数外部连接起来的桥梁

优点

  1. 能够读取其他函数内部的变量的值
  2. 能够让这些变量始终保持在内存中,不会被清除

什么是闭包(判定方法)

返回一个函数,并且这个函数对这个局部变量存在引用,
形成包含关系,可维持变量的状态,需要将函数赋值给全局变量,该全局定义的函数,则成为闭包

function f() {
   var x = 1;
   return function() {
       return x++;
   }
}
var f1 = f();

为啥要有闭包

局部变量不能长期保存,全局变量有会产生污染,闭包就应运而生了,它既能长期保存,也不会产生污染。他为啥能够长期保存呢?利用垃圾回收机制不回收全局变量的“漏洞”,
var f1 = f(); ,它便能够长期保存。就行jsonp一样,利用script标签不受同源政策的影响,他便能够实现非同源的访问。

应用1:通过一个变量维持一个状态的值

function f() {
  var x = 0;
  return function() {
         return x++;
 }
}
var a = f();
var b = f();

应用2: 利用闭包封装XMLHttpRequest

//闭包封装
function Http() {
            var xhr = new XMLHttpRequest();
            var _url = 'http://139.196.42.209:8001';
            /*
               methods 请求方式  get post
               url  请求地址 /upload/list
               data 传入的数据 一个对象 
            */
            return {
                request: function (methods, url, data, success, error) {
                    xhr.open(methods, _url + url);
                    if (methods == 'get') {
                        xhr.send();
                    } else {
                        xhr.setRequestHeader("Content-Type", "application/json");
                        xhr.send(JSON.stringify(data));
                    }
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            success(xhr.responseText);
                        } else if (xhr.status != 200) {
                            error(xhr.responseText.msg)
                        }
                    }
                }
            }

        }
//调用
var http = Http();
            http.request('get', '/upload/list', {}, function (res) {
                console.log(res);
            },
                function (err) {
                    console.log(err);
                })
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值