【博学谷学习记录】超强总结,用心分享前端|闭包&变量提升

目录

闭包

变量提升

函数进阶

函数提升

函数参数

动态参数

剩余参数


闭包

概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域

简单理解:闭包 = 内层函数 + 外层函数的变量

例:function outer() {

const a = 1

function f() {

console.log(a)

}

}

outer()

一般情况下,函数套函数不会产生闭包,但像这种里层函数使用了外层函数的变量时,会产生闭包

闭包的作用:封闭数据,提供操作,外部也可以访问函数内部的变量

变量提升

变量提升是JavaScript中比较“奇怪”的现象,它允许在变量声明之前即被访问(仅存在于var声明变量)

  1. 变量在未声明即被访问时会报语法错误
  2. 变量在var声明之前即被访问,变量的值为undefined
  3. let/const声明的变量不存在变量提升
  4. 变量提升出现在相同作用域中

变量提升流程:先把var变量提升到当前作用域最前面,只提升变量声明,不提升变量赋值,然后依次执行代码

函数进阶

函数提升

函数提升与变量提升比较类似,是指函数在声明之前即可被调用

例1:

foo()

function foo() {

console.log(‘函数声明之前即被调用’)

}

例2:

bar()

var bar = function() {

console.log(‘函数表达式不存在提升现象’)

}

  1. 函数提升能够使函数的声明调用更灵活
  2. 函数表达式不存在提升的现象
  3. 函数提升出现在相同作用域中

函数参数

动态参数

arguments是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参

当不确定用户传入多少实参时可以使用

例:function getSum() {

let sum = 0

for(let i = 0; i < arguments.length; i++) {

sum += arguments[i]

}

console.log(sum)

}

getSum(2,3,4)

getSum(2,3,4,5,6)

总结:

  1. arguments是一个伪数组,只存在于函数中
  2. arguments的作用是动态获取函数的实参
  3. 可以通过for循环依次得到传递过来的实参

剩余参数

剩余参数允许我们将一个不定数量的参数表示为一个数组

例:function config(a,...other) {

console.log(a)  // 得到‘http://baidu.com’

console.log(other)  // 得到[‘get’,‘json’]

}

config(‘http://baidu.com’,‘get’,‘json’)

...是语法符号,置于最末函数形参之前,用于获取多余的实参

借助...获取的剩余实参,是个真数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值