何时确定闭包函数的状态?

时间:2018-02-28 00:55:10

标签: javascript closures

我期望下面的x.gettf()(在javascript控制台中输入,Chrome)返回true。请解释发生了什么。似乎gettf没有访问tf的当前值,但是从foo返回的值是什么?

 print sum([i for i in datas],[])

2 个答案:

答案 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 }
};