【ECMA262学习系列(一)】函数对象详解(Function Object)

Table of Contents

  1. 直接调用 Function()
    1. Function(p1, p2, ..., pn, body)
  2. Function 的构造器对象(The Function Constructor)
    1. new Function(p1, ..., pn, body) 执行过程
      1. 文字描述
      2. 伪码
      3. 图解
  3. 构造函数的属性(Properties of The Function Constructor)
    1. 简介
    2. 内部属性
      1. Function [[Extensible]]: true
    3. Function.prototype
    4. Function.length
  4. 原型对象的属性(Properties of the Function Prototype Object)
    1. Function.prototype.constructor
    2. Function.prototype.toString()
    3. Function.prototype.apply(thisArg, argArray)
    4. [Function.prototype.call(thisArg[, arg1[, arg2, …]])](#org76d3c4b)
    5. [Function.prototype.bind(thisArg[, arg1[, arg2, …]])](#orgf50c28f)
      1. 步骤
      2. 执行过程涉及的内部函数
      3. 步骤伪码
      4. 步骤图解
  5. 函数实例属性(Properties of Function Instances)
    1. length
    2. prototype
    3. [[HasInstance]]
    4. [[Get]]
  6. 总结

直接调用 Function()

直接调用构造函数相当于 new Function(...)

Function(p1, p2, ..., pn, body)

  • 首先创建一个 Function 对象 fn = new Function()
  • 然后将参数传入到 fn 调用 fn(p1, p2, ..., body)

Function 的构造器对象(The Function Constructor)

new Function(p1, ..., pn, body) 执行过程

文字描述

  • argCount = arguments.length 记录参数长度
  • P = '' 新变量用空串初始化
  • 如果 argCount = 0, 设置 body = ''
  • 如果 argCount = 1, 设置 body = arguments[1], 即只有一个参数时,第一个参数
    即保存这函数执行体
  • 否则,如果 argCount > 1
    • firstArg = arguments[0] 保存第一个参数
    • P = ToString(firstArg)
    • k = 2
    • 进入循环, 条件: while k < argCount, 此步将所有参数用逗号分隔组合成字符

      • nextArg = arguments[k]
      • P = concat(P, ToString(nextArg)) 即将第一个参数和后面的参数用逗号连
        接成字符串
      • k++
    • body = arguments[k]
  • body = ToString(body)
  • parse(P, FormalParameterList) 判断 P 是不是可以作为参数列表来解析,
    不能则抛出 SyntaxError 异常
  • parse(body, FunctionBody) 判断 body 是不是可以作为函数体来解析,不能则
    抛出 SyntaxError 异常
  • parse(body, StrictMode) 判断函数体是否是严格模式代码,结果保存到 strict
    = true/false
  • 如果 s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若叶岂知秋vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值