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

时间:2010-11-22 17:29:29

标签: javascript scope

是否可以从外部函数访问内部变量,如此示例?

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

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

4 个答案:

答案 0 :(得分:4)

不,那不行。重要的是(词汇上)函数定义,而不是调用的地方。

当确定“c”指的是什么(如果有的话)时,语言在本地范围内查找,然后在下一个范围中根据函数的定义 。因此,如果在的另一个函数中调用“a”, 具有自己的本地“c”,则该值将是警报显示的内容。

function b() {
  var c = 'banana';
  a(function() {
    alert(c);  
  });
}

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

答案 1 :(得分:2)

不,这是不可能的。您声明匿名函数的范围无权访问此c变量 - 事实上,a之外的其他任何内容都可以访问c

答案 2 :(得分:2)

这不会起作用,因为变量c是在函数中定义的,并且在函数外部不可用。但有一种选择是将变量c传递给提供给a

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

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

答案 3 :(得分:0)

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

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

2. 将参数传递给f

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