gpt4 book ai didi

javascript - Js 闭包 : Function fails during second invoke

转载 作者:行者123 更新时间:2023-11-30 17:21:15 24 4
gpt4 key购买 nike

我有下面的例子

function sum (a){

this.sum = a;
this.x = function (b){
if (b == undefined ){
return sum;
}else
{
sum+=b;
return x;
}
}
return x;
}

它第一次用于这样的调用 sum(1)(2)(3)() 但当我调用它两次时失败谁能帮忙。谢谢。

最佳答案

因为您对 sumx 使用了全局变量。使用 var 关键字将它们声明为本地:

function sum(a) {
var sum = a;
var x = function (b) {
if (b == undefined) {
return sum;
} else {
sum += b;
return x;
}
}
return x;
}

sum(1)(2)(3)() // 6
sum(1)(2)(4)() // 7

在这种情况下,函数内部的上下文 (this) 是全局对象,因此当函数执行时,它会设置两个全局变量,重新定义原始的 sum 函数数值。

请记住,如果您处理的是普通函数,而不是构造函数 (new Something()),则永远不要使用 this。这就是为什么使用 strict 模式是个好主意,这样 this 就会变成 undefined 并且不会让你产生这种困惑。

关于javascript - Js 闭包 : Function fails during second invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094169/

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