gpt4 book ai didi

javascript - 什么时候确定闭包函数的状态?

转载 作者:行者123 更新时间:2023-11-30 20:43:17 25 4
gpt4 key购买 nike

我希望下面的 x.gettf()(在 JavaScript 控制台、Chrome 中输入)返回 true。请解释发生了什么。 gettf 似乎访问的不是 tf 的当前值,而是从 foo 返回时的值?

function foo() { 
var tf=false;
function gettf() {return tf;}
return {tf:tf, gettf:gettf }
};

x = foo();

{tf: false, gettf: ƒ}

x.tf

false

x.tf = true;

true

x.gettf()

false

x.tf

true

最佳答案

您正在为返回的对象 x 中的属性 tf 分配一个新值,而不是修改函数 foo 中声明的变量。

gettf 的范围是函数 foo 而不是返回的对象。

此代码段说明了如何访问函数 foo 中声明的变量 tf

function foo() {
var tf = 0;
function gettf() {
return tf;
}
function settf(nx) {
tf = nx;
}
return {
tf: 1,
settf: settf,
gettf: gettf
}
}

var x = foo();
console.log('tf in returned object: ' + x.tf);
console.log('tf in function foo: ' + x.gettf());

x.tf = 2;
x.settf(3);

console.log('new value of tf in returned object: ' + x.tf);
console.log('new value of tf in function foo: ' + x.gettf());
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 什么时候确定闭包函数的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020353/

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