【读书笔记】- 红宝书(3)函数
- 因为函数是对象,所以函数名就是指向对象的指针
- 箭头函数可以不用大括号,省略大括号会隐式返回这行代码的值
- 使用不带括号的函数名会访问函数指针,而不会执行函数
- 在函数中尝试重写arguments对象会导致语法报错(箭头函数中不可使用arguments关键字访问参数)
- Arguments值不会在函数内被修改,始终以调用函数时传入的参数为准
- Arguments还有一个callee属性,是一个指向arguments所在函数的指针
- 在递归中,arguments.callee可以让函数逻辑与函数名解耦,但严格模式下不能使用arguments.callee,但可以使用命名表达式达到目的(P306)
- 如果函数的默认参数是函数,那么只有在函数被调用而且未传入相应参数时,才会被调用
- 在箭头函数中,this引用的是定义箭头函数的上下文
- 在标准函数中,this引用的是把函数当成方法调用的上下文对象
- 在事件回调或定时回调中调用某个函数时,this指向并非想要的对象,此时将回调函数写成箭头函数即可,因为箭头函数会保留定义该函数时的上下文
- Call()和apply()真正强大的地方不是给函数传参,而是控制函数调用上下文即函数体内this值的能力,其好处是可以将任意对象设置为任意函数的作用域
- 闭包指的是那些引用了另外一个函数作用域中变量的函数,通常在嵌套函数中实现。
- 每个函数在被调用时都会自动创建两个特殊变量,this和arguments,这俩都是不能在内部函数中直接访问的,如果想访问,则需要先将其保存到闭包能访问的另一个变量中(P313)
- 在闭包中使用this,如果内部函数没有使用箭头函数定义,则this对象会在运行时绑定到执行函数的上下文。如果在全局函数中调用,则this在非严格模式下=window,在严格模式下=undefined。如果作为某个对象的方法调用,则this等于这个对象。,但匿名函数在这种情况下不会绑定到某个对象(P312)