写在前头
大多数小伙伴看技术书籍都会用“啃”来描述读书的直观感受,当然我也是一个前端小白,白的透明那种,但是我在读技术书籍感觉到“啃”的时候,我希望把我啃红宝书第四版的过程的想法,总结带给大家,以供后来者能够更快上手。
注: 本文由于作者水平原因,如有错误之处,恳请大家指正,另外随着学习的深入,体会的加深,我会不断回来更新,修改这类文章。
思维导图
简述
函数这一章其实在有一定的编程基础,比如学过一点c语言就很好读下去。整体还是易读板块。
10.11 函数表达式
- 函数声明
提升
函数声明会在代码执行之前获得定义。及时函数定义在函数调用之后也不会报错。
原因
JavaScript 引擎会先读取函数声明,然后再执行代码。而函数表达式的函数定义不会提升。不可以在定义之前调用函数。
- 匿名函数
别称
兰姆达函数
未用于赋值时
使用函数表达式其实就是创建一个匿名函数然后把这个函数赋值给一个变量。当这个函数没有赋值给一个变量时,函数的name属性是空字符串。
- 提升小例子
①使用if else 判断是否该选择使用哪一个函数。
如果if else 里面是函数声明,那么由于不同的浏览器会可以导致错误。
如果if else 里面是函数表达式,那么可以根据if()里面的值正确的选择使用函数。
- 在函数中返回另一个函数
- 怎么样是一个函数表达式
任何时候,只要函数被当作值来使用,它就是一个函数表达式。
10.12 递归
- 形式
递归函数通常的形式是一个函数通过名称调用自己
- 改变函数名
递归失败
将函数名赋值给一个变量,使用这个变量递归,之前的函数名赋值为空值。使用之后的变量来进行递归,但是这样会导致无法成功递归。
arguments.cellee
arguments.callee 就是一个指向正在执行的函数的指针。如果将函数名赋值给其他变量,使用这个变量进行递归的时候,内部可以使用arguments.cellee。这样就可以保证递归的成功。
注意 在严格模式下运行的代码是不能访问 arguments.callee 的,因为访问会出错。
命名函数表达式
将函数使用括号包括起来然后赋值给一个函数。