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来代替当前匿名函数,但是严格模式禁用的该属性

相关推荐
1024小神4 分钟前
在GitHub action中使用添加项目中配置文件的值为环境变量
前端·javascript
齐尹秦13 分钟前
CSS 列表样式学习笔记
前端
Mnxj17 分钟前
渐变边框设计
前端
用户76787977373219 分钟前
由Umi升级到Next方案
前端·next.js
快乐的小前端21 分钟前
TypeScript基础一
前端
北凉温华22 分钟前
UniApp项目中的多服务环境配置与跨域代理实现
前端
源柒22 分钟前
Vue3与Vite构建高性能记账应用 - LedgerX架构解析
前端
Danny_FD23 分钟前
常用 Git 命令详解
前端·github
stanny24 分钟前
MCP(上)——function call 是什么
前端·mcp
1024小神30 分钟前
GitHub action中的 jq 是什么? 常用方法有哪些
前端·javascript