高级javascript编程原理
javascript的特殊之处
- 每个函数对象都有一个prototype对象
- 每个函数对象的prototype都有一个constructor属性
- 函数构建的时候prototype指向父对象的prototype,或者理解为复制一份
- 函数构建的时候prototype的constructor指向自己
- 调用函数的时候会执行constructor方法
- 函数可以调用自己的prototype对象的属性和方法
- 函数可以覆盖自己的prototype对象的属性和方法
javascript函数的隐含特性
函数参数获取的第二种形式
无论你如何定义函数的参数,在调用函数的时候,所有参数都会以数组元素的形式赋值给函数的arguments这个变量
调用函数的对象被赋值为caller,被调用函数被赋值为callee
作用域链和函数提升
普通function的定义可以做到前置调用,而变量式声明的函数则不能前置调用。
浏览器的顶级作用域是window
ECMA5 和 AMD, CommonJS
AMD(asynchronous module definition) 提供了浏览器端异步加载所有js文件的方式
CommonJs 定义了服务器端模块化的支持方式:
- require()引用和调用文件的对象
- module.exports和exports来为文件中的对象提供调用接口