2020.11.11

79 阅读2分钟

1.个别浏览器支持函数的.name属性来访问函数的名称。

2.函数声明支持函数声明提升。可以定义在调用它的语句的后面。

3.函数表达式就类似于我们常规的变量赋值语句,这种情况创建的函数叫做匿名函数,也叫拉姆达函数。使用前必须赋值,也就是没有函数提升特性。

4.在if else语句中不要使用函数申明,多数浏览器会忽略if里面的条件,一般使用函数表达式。

5.函数可以作为其他函数的值返回。

6.递归学习:进行递归时,尽量使用arguments.callee来代表函数名,更为保险。因为函数名其实是一个指针,如果其他地方对这个指针进行了修改,那么递归函数就会执行出错,而arguments.callee就是指向正在执行函数的指针,刚好代替函数名进行工作。但是严格模式下,arguments.callee访问不了,所以最终解决方法是使用命名函数表达式(其实就是函数表达式也显式的定义一个函数名,这是为了递归使用)成相同结果,这样不管函数变量怎么变,等式右边的表达式是有效的。

7.闭包学习:闭包是指有权访问另一个函数作用域中的变量的函数。

8.调用一个函数会发送哪些过程:首先会创建一个执行环境及相应的作用域链。然后使用arguments和其他命名参数来初始化活动对象。并且这些对象都会有个调用优先级排序,按照包含关系进行排序。

9.每个后台的执行环境都有一个表示变量的对象——变量对象。全局环境的变量对象始终存在,而局部环境的变量对象,只在函数执行的过程中存在。