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
函数的一部分被调用时,foo
的 this
并不会改变。因此,当你调用 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
来代替当前匿名函数,但是严格模式禁用的该属性