我期望下面的x.gettf()(在javascript控制台中输入,Chrome)返回true。请解释发生了什么。似乎gettf没有访问tf的当前值,但是从foo返回的值是什么?
print sum([i for i in datas],[])
答案 0 :(得分:1)
您正在为返回的对象tf
中的属性x
分配新值,而不是修改函数foo
中的声明变量。
gettf
的范围是函数foo
,而不是返回的对象。
此代码段说明了如何在函数tf
中访问声明的变量foo
。
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; }

答案 1 :(得分:0)
在您的示例中,foo()
返回一个具有两个属性“tf”和“gettf”的对象。
语句x.tf = true;
修改 对象 的“tf”属性,但对foo()内部声明的“tf”变量没有影响。该函数之外的任何内容都无法访问该变量。
然而,以下内容可行:
function foo() {
var tf=false;
function gettf() {return tf;}
function settf(x) {tf = x;}
return {settf:settf, gettf:gettf }
};