在JavaScript中从外部函数访问内部变量

4

像这个例子一样,是否有可能从外部函数访问内部变量?

function a(f) {
  var c = 'test';
  f();
}

a(function() {
  alert(c);  //at this point, c should = "test"
});
4个回答

4
不行,那样做行不通。重要的是函数在定义时所处的位置(词法作用域),而不是它被调用的位置。当确定"c"指向的内容时,语言会先在本地范围内查找,然后根据函数定义在下一个范围中查找。因此,如果这次对"a"的调用发生在另一个具有自己本地变量"c"的函数中,那么弹出的值就是那个函数中的值。
function b() {
  var c = 'banana';
  a(function() {
    alert(c);  
  });
}

b(); // alert will show "banana"

2
不可能。您在匿名函数中声明的作用域无法访问此 c 变量--实际上, a 之外的任何内容都无法访问 c

2

这样是行不通的,因为变量c是在函数内部定义的,无法在函数外部使用。但可以通过将变量c作为参数传递给提供给a的函数。

function a(f) { 
  var c = 'test'; 
  f(c); 
} 

a(function(c) { 
  alert(c);  //at this point, c should = "test" 
}); 

0

像其他人所说的,这是不可能的。你可以

1. 在函数范围之外声明变量

2.f传递一个参数:

function a(f) { var c = { name: 'test' }; f(c)  };
a(function(o) { alert(o.name) })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接