A week of review01

闭包的特点:

1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
作用:延长变量的生命周期,还有变量的访问权限

 function hq() {
        let  Q = 0;
        function HQ() {
            console.log(Q++);
        }
        setInterval(HQ,1000)

    }
    
    hq();

闭包的用途:

匿名自执行函数:

除了每次使用变量都是用var关键字外,我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一次,其内部变量无需维护,比如UI的初始化,那么我们可以使用闭包。

对象的增删改查:

// 对象存储的是一个复杂数据类型,以键值对的形式存储多个数据
        let fn = {
            name:'张',
            skill:'佐菲射线',
            age:19,
        }
        // 增删改查
        // console.log(fn.skill);

        // fn.name='黄';
        // console.log(fn);

        // delete fn.skill;
        // console.log(fn);

        // fn.happy = 'smile';
        // console.log(fn);


        // for循环:for(let i =0;i<arr.length,i++){arr[i]}
        // 遍历对象:for(let key in 对象名){}
        for(let key in fn){
      console.log(key);
      console.log(fn[key]);
        }

作用域:

1、全局作用域
全局作用域是程序最外层的作用域,它会持续存在。某些情况下也可以理解为windows对象。全局作用域具有以下特点:

全局作用域的变量在任何地方都能访问到
全局作用域是作用域链的最顶端
2、局部作用域
局部作用域一般指的是函数作用域,函数作用域只有在函数定义时才会创建,函数执行结束作用域将销毁。局部作用域具有以下特点:

函数作用于内的变量外部无法直接访问
只有在函数开始执行后才开始创建函数作用域
 

 for(let i =0 ;i<=6;i++){
                  console.log(i);
         }
         // console.log('循环内部函数'+i);//i is not defined
         块级作用域只可在作用域内部执行
// 全局作用域
var a= 1; 
var b = []; 
function getA(){
	var c= {}; 
	d = 3; 
} 
getA();

3、块级作用域
块级作用域是ES6发布后出现的一个标准。需要借助let与const实现。

  • 块级作用域内的变量在外部是无法访问的
    { 
    //这不算块级作用域,因为在外部能访问a;
    	var a= 2;
    }
    console.log(a) //2
    
    {
    // 块级作用域
    	let b = 3
    }
    console.log(b) // 报错
    

    作用域链

  • 作用域链就是变量在查找取值过程中遍历的一个链条。遵循以下流程:

    1,在自身作用域内查询变量,找到即停止查询
    2,自身作用域内未查找到,像上次作用域查询,查询有结果即停止查询,无结果继续向上查询
    …重复上述步骤
    3,直至查询到全局作用域,全局作用域内若也无法查询到变量,则返回undefined
    4,作用域链是向上查找的
    修改作用域链的方式
    1、call()apply()bind()
    他的原理是通过修改this指向修改作用域链。

  • 2、try{}catch(){}中的catch
    3、with(不推荐)

    function getName(){
    	console.log(this.name)
    }
    var obj = {
    	name:"csdn"
    }
    getName().apply(obj)  // apply绑定后就暂时将getName的上级作用域修改为了obj,在原有的getName-->全局作用域间加了一环==> getName-->obj-->全局作用域
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值