作用域与函数进阶

文章详细阐述了JavaScript中的执行环境和变量对象的概念,包括全局和函数执行环境以及它们的生命周期。接着讨论了作用域和作用域链的规则,强调了全局和局部作用域的区别。此外,文章深入介绍了函数的定义、箭头函数的特性和用法,以及参数和arguments对象。最后,重点讲解了闭包的概念及其在解决变量作用域、内存管理问题上的应用,同时提到了闭包的优缺点。
摘要由CSDN通过智能技术生成

1.执行环境和变量对象 [ 理解 ]

  1. 执行环境

    1.代码运行都需要一个执行环境, 默认环境"全局执行环境"
    2.函数调用就会产生一个"函数执行环境",并添加到"环境执行栈中"
    3.函数调用结束后,就会从"环境执行栈中"出栈,并且自动销毁,全局执行环境会保留
    
  2. 变量对象

    1.每个执行环境都有一个关联的变量对象
    2.变量对象主要保存了当前环境中所有"标识符"(变量 函数 函数中形参 对象中key)
    3.函数调用结束后,就会出栈并销毁,变量对象也自动销毁
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9sIgz9P-1675852094776)(C:\Users\admin\Desktop\3.png)]

2.作用域和作用域链 [ 掌握 ]

  1. 作用域

    标识符起作用的范围
    
  2. 作用域链

    规定标识符查找的规则, 规则: '从里向外查找,一直查找到全局,找到就停止,如果全局都找不到那就报错'
    
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PjC5QZ6U-1675852094778)(C:\Users\admin\Desktop\4.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VYfDTvGf-1675852094778)(C:\Users\admin\Desktop\5.png)]

  1. 作用域分类 [重点]
全局作用域
函数作用域  == 局部作用域
块级作用域  == 局部作用域

3.函数进阶 [ 重点 ]

3.1.函数定义

  1. 声明式

    function 函数名 (形参, 形参, 形参='默认值'){
        功能代码
        return 结果
    }
    
    函数名(实参, 实参, 实参)
    
    
  2. 表达式

    const 变量名 = function (形参, 形参, 形参='默认值'){
        功能代码
        return 结果
    }
    函数名(实参, 实参, 实参)
    
    

3.2箭头函数

  1. 理解

    对匿名函数的简化写法
    
  2. 方式

    const foo = function (a) {
        return a + 10;
    }
    
    
    const foo1 = (a) => {
        return a + 10;
    }
    
    
    axios.get()
    .then(function (res){
        
    })
    
    axios.get()
    .then(res => {
        
    })
       
    
  3. 特殊场景再次优化

    1.函数体中只有一个return,可以去调用return{}
    2.只有一个形参,去掉()
    
  4. 注意

    1.没有实参对象arguments
    2.不能作为"构造函数"使用
    

3.3参数

  1. 形参

    未知数据
    局部变量 === 只能在定义它的函数内部使用
    占位符
    
  2. 实参

    调用函数时传入的实际值(具体值)
    实参和形参是一一对应关系 (数据类型必须一直)
    

3.4 arguments [ 复习 ]

1.每个函数都有arguments,只有箭头函数没有
2.arguments是一个伪数组(类数组),不是真数组,不能用数组的方法
3.arguments通常在实参个数不确定的情况使用

3.5函数调用方式 [ 掌握 ]

1.普通函数调用		===> 函数名()
2.作为对象方法调用	   ===> 对象.方法名()
3.作为回调函数调用	   ===> 函数名(回调函数)  对象.方法名(回调函数) ...
4.立即执行函数调用     ===> ;(函数)()

4. 闭包[重点记忆]

  1. 什么是闭包

    函数内部跨作用域访问变量, 闭包就是作用域的体现
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0VWyy2wp-1675852094778)(C:\Users\admin\Desktop\6.png)]

  2. 写法

    ;(function (){
        let 变量a =;
        window.方法 = function (){
            访问"变量a"的方式
        }
    })()
    
  3. 闭包解决的问题

    1.循环计时器		===> es6: let const
    2.循环注册事件    ===> es6: let const 
    3.es5模块化      ===> es6: 模块化
    
  4. 闭包优缺点

    优点: 私有化 (把变量保护起来,防止全局污染)
    
  5. 闭包解决的问题

    1.循环计时器		===> es6: let const
    2.循环注册事件    ===> es6: let const 
    3.es5模块化      ===> es6: 模块化
    
  6. 闭包优缺点

    优点: 私有化 (把变量保护起来,防止全局污染)
    缺点: 形成闭包的变量会常驻内存,严重时造成内存溢出
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值