this, caller, callee的区别和用法

javaScript 复制代码
function foo() { 
    console.log(this);
    console.log(foo.caller);
    
}

function bar() {
    foo(); 
    
}

foo();

bar();

在 JavaScript 中,this 的值取决于函数被调用的方式。当一个函数作为对象的方法被调用时,this 指向该对象。当一个函数作为函数被调用时,this 默认指向全局对象(在浏览器中是 window)。

在你的代码中,foo 是一个独立的函数,所以它的 this 默认指向全局对象。当你单独调用 foo() 时,它会输出全局对象。

然而,当 foo 作为 bar 函数的一部分被调用时,foothis 并不会改变。因此,当你调用 bar() 时,foo() 中的 this 仍然指向全局对象。

所以,foo()bar() 输出的结果是一样的,都是全局对象(箭头函数另说)。

caller显示的函数的调用者,foo()直接调用返回的是null; bar()直接调用返回的是 bar函数体;

javaScript 复制代码
function foo() { 
    console.log(arguments.caller);
    
}

function () {
   console.log(arguments.caller); 
}

arguments.caller用来获取当前函数名,主要是在匿名函数递归时,函数没有名字 ,所以可以用arguments.caller来代替当前匿名函数,但是严格模式禁用的该属性

相关推荐
余道各努力,千里自同风2 分钟前
小程序中获取元素节点
前端·小程序
PineappleCoder4 分钟前
大模型也栽跟头的 Promise 题!来挑战一下?
前端·面试·promise
非凡ghost5 分钟前
MousePlus(鼠标增强工具) 中文绿色版
前端·windows·计算机外设·软件需求
焚 城20 分钟前
EXCEL(带图)转html【uni版】
前端·html·excel
我家媳妇儿萌哒哒24 分钟前
Vue2 elementUI年份区间选择组件
前端·javascript·elementui
笨笨狗吞噬者30 分钟前
【uniapp】小程序体积优化,分包异步化
前端·微信小程序·uni-app
该用户已不存在31 分钟前
Golang 上传文件到 MinIO?别瞎折腾了,这 5 个库拿去用
前端·后端·go
snows_l36 分钟前
JavaScript 性能优化实战大纲
前端
文心快码BaiduComate1 小时前
文心快码3.5S开发古风射覆小游戏,它帅到我了!
前端·后端·程序员
佛系菜狗1 小时前
防抖和节流-防抖鸿蒙版本实现
前端