犀牛书第五版读书笔记——Chapter 8. Functions

1.function定义时指定的参数数量可以和实际调用时传递的参数数量不同,没有传递的参数设为undefined,多余的参数被忽略,但是可以通过arguments属性来访问,这是call object的属性

2.没有return语句的函数,以及直接return的函数,返回值都是undefined

3.arugments有一个callee属性,它指向function自身

4.javascript中的function也是对象,可以赋值给其它对象作为属性。而且也有自己的属性,比如很重要的prototype属性

5.每个函数都有一个prototype属性,该属性指向一个预先定义的原型对象。当函数和new操作符结合使用时,prototype对象的所有属性都会映射到新创建的对象上。所以prototype属性在创建新对象时,起到很重大的作用

6.function还有call()和apply()方法,这2个方法作用是一样的,只是call()方法接受多个参数,而apply()接受所有参数组成的数组。这2个方法的第一个参数,作为this的值

7.function中的this不是由如何定义决定的,而是由function如何被调用决定的。用object.function()的形式调用时,this就指向object。如果用function.call()或者function.apply()方式调用时,this指向第一个参数。如果用new function()形式调用时,此时function是作为一个构造函数,this指向新创建的对象

8.javascript中的function是文法作用域,而不是动态作用域。这意味着函数是在定义的范围内运行,而不是执行的范围内运行。当一个函数被定义时,它当前的scope chain就被保存,并成为函数的内部状态而固定下来

9.当javascript解释器调用一个函数时,它首先将scope chain设置为函数被定义时的scope chain。然后创建一个call object,并放置到scope chain的最前面。call object里包含了所有的临时变量和参数

10.据我的理解,当一个function返回一个嵌套function,并赋值给一个变量,就形成了一个闭包。这个返回的function(即闭包),仍然访问到当时的变量

你可能感兴趣的:(JavaScript,prototype,读书)