javascript - 为什么当调用 apply() 或 call() 时 'this' 指向函数内的 window ?

标签 javascript function this

我正在阅读 Nicholas Z.Zakas 的《Web 开发人员专业 JavaScript》第三版,在引用类型章节中,我对函数类型部分感到有点困惑。

function sum(num1, num2){
return num1 + num2;
}

function callSum1(num1, num2){
return sum.apply(this, arguments);
}

alert(callSum1(10,10)); //20

他说:

“在此示例中,callSum1() 执行 sum() 方法,并传入 this 作为 this(等于window,因为它是在全局范围内调用的),并且还传入arguments 对象。 “

我明白他说的是什么,但我不明白为什么。 This 应该指向该函数不是吗?现在我很困惑它指向窗口,因为它是在全局范围内调用的..

有人可以向我解释一下吗? :)

我不确定我以后是否会或者必须使用这个技术,但我想确保我理解它,尤其是这一部分。有关 this 及其用法的更多详细信息将在 OOP 部分中提供,但它现在是一个有趣的问题。

提前致谢!

最佳答案

this 的值取决于您调用函数的方式。

如果您使用 callapply 调用函数,则 this 的值将是该函数的第一个参数。

这里有 sum.apply(this,arguments); 因此它将传递当前值。与往常一样,该值取决于您调用函数的方式。

由于您在没有上下文的情况下调用 callSum1(10,10),因此 this 将是 窗口

(如果您处于严格模式,它将是未定义。如果您不在浏览器中,它将是您使用的 JS 环境的默认对象)。

关于javascript - 为什么当调用 apply() 或 call() 时 'this' 指向函数内的 window ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20900194/

相关文章:

javascript - 当我们使用 javascript 单击垂直选项卡时,如何显示页面标题和菜单

python - 寻找一种更优雅的方式将字节转换为位列表

php - 从函数返回时访问数组元素

function - firebase deploy --only 函数覆盖现有函数

javascript - Angular 地理编码结果不同步

javascript - 在 typescript 的定义接口(interface)中添加属性

javascript - 如何将对象引用传递给另一个对象?

php - 在 PHP 中重新分配 $this

javascript - 在 html5 Canvas 上自定义滚动

javascript - 为什么读取未声明的变量会出现引用错误,但未声明的对象属性在 javascript 中返回未定义?