红宝书阅读笔记!第四天_函数(1)

174 阅读3分钟

写在前面,刚刚去吃了串串,不知道会不会吃饱了就困,不知道今天还能看多少。

⚪函数表达式、函数声明以及箭头函数

⚪默认参数及扩展操作符

⚪使用函数实现递归

⚪使用闭包实现私有变量

定义函数👇

function sum (num1,num2){
	return num1+num2;
}

let sum = function(num1,num2){
	return num1+num2;
}

let sum = (num1,num2) =>{
	return num1 + num2;
}

箭头函数

书上写了一页,大概说的是,箭头函数是ECMA6新增得函数声明方法,优点是非常适合嵌入函数的场景,比如:

let double = x => { return 3*x; };

不过也有一些场景不适用,箭头函数不能使用arguments、super和new.target,也不能构造函数。箭头函数也没有prototype属性。

函数名

书上又写了一页,大概讲的是,如果你想正常声明一个函数那么这个部分你就可以不看了,如果你一定要钻牛角尖的话,只能说我也不是很懂。

理解参数

参数和前面的比起来就很有意思了,Javascript中的参数和大多数编程语言都不是很一样,因为传入函数的时候他不关心参数的个数,也不关心参数的数据类型。在非箭头函数中,传入的参数会被保存在:arguments的类数组对象中,function会依次在arguments中取值,你也可以通过arguments[]去访问。不过arguments[]中的值虽然和传入的参数一致,并且会因为其中一个修改彼此同步,但是在内存中保存的位置并不在一起。以上的166字对箭头函数除外。

没有重载

每个函数只能有一个定义,如果定义两次,那么第二次就会覆盖第一次的。比如Java中,一个函数可以定义两次,只要签名(接收参数的类型和数量)不同。

默认参数值

默认参数值不会影响到arguments的值。只要传入参数,那么arguments只反映传给函数的参数。

参数扩展和升级

1.扩展参数

因为arguments并不知道你传进来的是什么东西,所以可以直接对可迭代的对象应用扩展操作符。
function getSum(){
	let sum = 0;
    for (let i = 0; i < arguments.length; i++){
    	sum += arguments[i];
    }
}

2.收集参数

没有很看懂,😭

函数声明和函数表达式

这里讲的是,函数声明会被提升,JavaScript引擎会先扫描一遍全部代码,然后把function提升到代码的前面。

大门时如果把函数声明改为等价的函数表达式,这个就不会被提升了。

函数作为值

比较类似于python里的高级函数,函数作为值被函数调用。

1、ECMAScript 中的函数名本身就是变量,所以函数也可以作为值来使用

2、就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。

文章内容参考:JavaScript高级程序设计(第四版)

标题样式来自:juejin.cn/post/684490…

哪里写错了就联系我🐧:54269504