gpt4 book ai didi

Javascript call() 方法未生成预期输出

转载 作者:行者123 更新时间:2023-12-02 18:18:49 24 4
gpt4 key购买 nike

我试图了解 call() 方法的工作原理。我在 Firebug Javascript 控制台中执行了以下代码片段。

代码:

var window = {num1: 10, num2: 20};
var o = {num1: 20, num2: 30};

var sum = function(num1, num2) {
return this.num1 + this.num2;
};

console.log(sum.call(o)); // 50
console.log(sum.call(window)); // 30
console.log(sum.call(this)); // 30

输出:

50
NaN
NaN

我预计输出分别为 50 和 30。当 window/this 对象作为执行上下文传递时,为什么 call() 返回 NaN?

最佳答案

声明窗口变量将跳过当前范围的窗口对象。这可能会导致意外的行为(在我的浏览器 firefox 中,我得到 50, 30, NaN)。将第一行更改为:

window.num1 = 10; window.num2= 20;

这会将 num1 和 num2 分配给全局窗口属性(不是一个好主意)。

另一方面,调用将第一个参数作为上下文传递(this)。函数声明中的参数是不必要的。如果您想传递带有参数的数组,请使用 apply,例如:

var myArgs = [10, 20];
sum.apply(window, myArgs);

然后,您必须从函数体中删除 this 限定符,以便它添加传递的参数。

关于Javascript call() 方法未生成预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com