JavaScript中this、caller、callee的区别及运用详解

发表时间: 2024-07-17 17:14
function foo() {     console.log(this);    console.log(foo.caller);    }function bar() {    foo();     }foo();bar();

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

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

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

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

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

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

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