JavaScript基础知识:函数进阶(一)

JavaScript基础知识:函数进阶(二)
JavaScript基础知识:函数进阶(三)


一、Rest参数和Spread参数

当我们在代码中看见 ’ … '时,它要么是 rest 参数,要么就是 spread 语法。
-区分方法:
*若 … 出现在函数参数列表末尾,则是 rest 参数,它会把剩余的参数放到一个数组中;
*若 … 出现在函数调用或类似的表达式中,则为 spread 语法,它会将一个数组展开为列表。

-使用场景:
*rest参数:用于创建可传任意参数的函数;
*spread语法:用于将数组传递给需要许多参数列表的函数;

Rest

function sumAll(...args){  //args为数组名
	let sum = 0;
	for(let item of args ){
		sum += item;
	}
	return sum;
}
alert(sumAll(1,2,3,4));   //10

Spread

let arr = [1,2,3,4,5];
alert(Math.max(arr));  // NAN
alert(Math.max(...arr));  // 5

二、变量作用域及闭包

1.嵌套函数

函数中可以返回一个嵌套函数,它可以作为一个新对象属性结果返回

2.词法环境

1)关于词法环境:理论上存在,用于理解事物如何运作的对象
在这里插入图片描述

2)变量与函数声明:

  **变量**

在这里插入图片描述
**函数在使用变量时,会从内到外依次在语法环境中寻找目标变量,使用最新值 **

**函数声明**

在这里插入图片描述

3)返回函数
在这里插入图片描述
在执行makeCounter的时候创建了一个函数,但并未执行它。所有的函数在创建时,都会记住它创建时的词法环境,也就是说,所有的函数都有名为 [[Environment]] 词法环境,该属性保存了对创建该函数的词法引用

function makeCounter(){
//	console.log('刚进入:',count);
//程序执行进入函数开始,变量进入“未初始化”状态,直到遇见let定义
//否则会报错:ReferenceError: Cannot access 'x' before initialization
	let count=0;
	console.log('count后:',count);
	return function(){
		console.log('进入:',count);  
		return count++;
	}
}

let counter = makeCounter();
alert(counter());
alert(counter());

在这里插入图片描述
在这里插入图片描述

原理:
当调用 counter() 时,会为该调用创建一个新的词法环境,并且其外部词法环境引用获取于 counter.[[Environment]]:
在这里插入图片描述

3.闭包

1)含义:指内部函数总是可以访问外部函数的变量和参数,即使外部函数被返回之后(被终结);

javascript函数会自动通过隐藏的 == [[Environment]] == 属性记录创建它们的位置,所以他们都可以访问外部变量(即所有函数都是闭包,除了new function 中的例外)

4.垃圾回收

如果对该函数没有引用,那么该函数的词法环境与变量会被回收,从内存中删掉。

关于语法环境的详细解释参见:链接: link.

以上内容参考于https://zh.javascript.info/object-methods,在此学习记录。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值