访问“父范围”

时间:2014-11-20 15:22:18

标签: javascript scope

免责声明: 我不确定我是否使用了正确的术语。

鉴于此代码:

var sample = 'Text';
var test = function(sample) {
    console.log(sample);
};
test('Text Too');

我知道如果函数参数具有不同的名称,console.log()调用将输出“Text”。有没有办法让test()函数引用“父范围”变量sample而不更改函数参数的名称?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:2)

不,没有办法在JavaScript中执行此操作。如果在内部作用域中使用相同的变量名,则外部作用域变量将完全无法访问该内部作用域。

编辑:当然,除了外部范围是全局范围。然后你可以使用window.sample

答案 1 :(得分:2)

@plbsam是对的,他不应该删除他的答案。

在您的特定情况下,函数内的this是调用它的上下文:docs

var sample = 'Global var';
var test = function(sample) {
  console.log("sample: "+sample);
  console.log("this.sample: "+this.sample);
};
test('Local var');

编辑:

因为这一切都取决于调用函数的范围,您总是可以将this分配给全局范围中的单独var,以便能够在任何地方访问它:

// this var can now be accessed inside any function as a reference to the global scope.
global = this;

var sample = 'Global';
var test = function(abc) {
  console.log("sample: "+sample);
  console.log("this.sample: "+this.sample);
  console.log("global.sample: "+global.sample);
};
test('Local');