js 函数的内部属性
函数内部有2个特殊对象: arguments 、 this
1、arguments 是一个类数组对象,包含传入函数中的所有参数,虽然它的主要用途是保存函数参数,但这个对象还有一个名叫 callee 的属性。
这个属性是一个指针,指向拥有这个 arguments 对象的函数:
这是一个非常经典的阶乘函数。定义阶乘函数一般用到递归算法。
但问题是这个函数的执行与函数名 factorial 紧紧耦合在了一起,如果过改变了函数名,势必要改变内部的递归调用。
为了消除这种紧密耦合现象,可以使用 callee :
2、另一个特殊对象是 this,引用的是函数据以执行的环境对象。
函数 showColor() 是在全局中定义的,所以当在全局作用域中调用该函数时,this 引用的是全局对象 window,也就是对 this.color 求值会转换成对 window.color 求值,于是结果为 red 。
而把这个函数赋值给对象 o ,并调用函数, this 引用的是对象 o,因此对 this.color 求值会转换成对 o.color 求值,返回 blue。
3、ECMAScript 5 也规范了另一个函数对象的属性:caller。
这个属性中保存这调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为 null。
因为 outer() 调用了 inner(),所以 inner.caller 就指向了 outer()。
但要注意,在严格模式下,访问这些属性会报错
不过也可以使用命名函数表达式来取得相同的结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现