[javascript权威指南][阅读笔记]六

10 篇文章 0 订阅
1 篇文章 0 订阅

第八章   函数


  1. 如果函数挂载在一个对象上,作为对象的一个属性,就称它为对象的方法
  2. 函数调用:作为函数,作为方法,作为构造函数,通过call()和apply()方法间接调用
  3. 任何函数当作为方法调用时都会传入一个隐式的实参,这个实参是一个对象,方法调用的母体就是这个对象
  4. 方法链:当方法的返回值是一个对象时,还可以继续调用这个对象的方法
  5. 和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this
  6. 构造函数的调用
  7. 构造函数的调用如果没有形参,那么它的圆括号可以省略,var a = new Object();和var a = new Object;是等价的
  8. 构造函数调用创建一个新对象,这个对象继承自构造函数的prototype属性。构造函数试图初始化这个对象,并将这个对象作为调用上下文,因此构造函数可以使用this来引用这个新创建的对象
  9. 构造函数通常不使用return语句,若return一个对象,则返回值为这个对象,若return空或原始值,则忽略这个返回
  10. 实参对象arguments:不是一个数组
  11. caller和callee属性
  12. ECMAScript规范规定callee指代正在执行的函数,caller指代调用正在执行的函数的函数
  13. 作为值的函数
  14. 作为命名空间的函数
  • 闭包
    • 词法作用域:函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的
    • 函数对象可以通过作用域链相互联系起来,函数体内部的变量都可以保存在函数作用域内
    • 当调用函数时闭包指向的作用域链和定义函数时的作用域链不一样时,情况有些微妙(当一个函数嵌套另一个函数,当外部函数将嵌套的函数对象作为返回值返回的时候往往会发生这种事情)
    • TIP1:每次调用js函数时,都会创建一个新的对象来保存局部变量,把这个对象添加到作用域链中。当函数返回后,便从作用域链中,将这个绑定变量的对象删除。如果没有嵌套函数、且没有其他引用指向这个对象,它就会被当做垃圾回收掉。如果定义了嵌套函数,每个嵌套函数都对应一个作用域链,且这个作用域链指向一个变量绑定对象。如果这些嵌套的函数对象在外部函数中保存下来,那么它们会和被回收的变量绑定对象一样被回收。但如果这些函数被作为返回值返回或存储在某处的属性里,即有外部引用指向这个嵌套函数,那么它就不会被回收,它所指向的变量绑定对象也不会被回收。
    • 将闭包合并为属性存取器方法?利用闭包实现的私有存取器方法?
    • this和arguments不是变量,而是关键字,因此,闭包想调用外部函数的this和arguments,需要在外部函数中将它们存在变量中
  • 函数的属性、方法
    • 属性:length(函数定义时给出的实参的个数)、prototype(函数的“原型对象”)
    • 方法:call()和apply()、bind()、toString()
    • bind():将函数绑定至某个对象。柯里化,bind()不止将函数绑定至一个对象,除了第一个实参之外,传入bind()的实参也会绑定至this
    • bind()返回的是一个函数对象
    • ES5的bind()方法可以作为构造函数?
  • Function()构造函数
    • 它所创建的函数并不是使用词法作用域,函数体代码的编译总是在顶层函数执行,也就是全局作用域
  • 函数式编程?
    • 使用函数处理数组?
    • 高阶函数:操作函数的函数?
    • 不完全函数?
    • 记忆?
此章有待细研。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值