Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问;“父范围”;_Javascript_Scope - Fatal编程技术网

Javascript 访问;“父范围”;

Javascript 访问;“父范围”;,javascript,scope,Javascript,Scope,免责声明:我不确定我使用的术语是否正确 鉴于此代码: var sample = 'Text'; var test = function(sample) { console.log(sample); }; test('Text Too'); 我知道,如果函数参数有不同的名称,则console.log()调用将输出“Text”。test()函数是否有方法在不更改函数参数名称的情况下引用“父范围”变量sample?如果是,怎么做?不,在JavaScript中没有办法做到这一点。如果在内部作用

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

鉴于此代码:

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

我知道,如果函数参数有不同的名称,则
console.log()
调用将输出“Text”。
test()
函数是否有方法在不更改函数参数名称的情况下引用“父范围”变量
sample
?如果是,怎么做?

不,在JavaScript中没有办法做到这一点。如果在内部作用域中使用相同的变量名,则该内部作用域将完全无法访问外部作用域变量


编辑:当然,当外部范围是全局范围时除外。然后,您可以使用
窗口。sample

不,在JavaScript中无法做到这一点。如果在内部作用域中使用相同的变量名,则该内部作用域将完全无法访问外部作用域变量


编辑:当然,当外部范围是全局范围时除外。然后你可以使用
窗口。sample

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

在您的特定情况下,
函数中的此
是调用它的上下文:


编辑: 由于这一切都取决于调用函数的范围,因此您始终可以将
分配给全局范围中的一个单独变量,以便能够在任何地方访问它:

// 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');

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

在您的特定情况下,
函数中的此
是调用它的上下文:


编辑: 由于这一切都取决于调用函数的范围,因此您始终可以将
分配给全局范围中的一个单独变量,以便能够在任何地方访问它:

// 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');

你的最后一行就是答案。您还需要什么?我想知道是否可以不更改函数参数的名称来执行此操作。您可以,但这将涉及
窗口
对象或任何其他对象。一般来说,答案是否。如果外部范围恰好是全局范围,则可以将变量作为全局对象的属性来访问(
窗口
在浏览器中)。您的最后一行就是答案。您还想要什么?我想知道是否可以在不更改函数参数名称的情况下执行此操作。您可以,但这将涉及
窗口
对象或任何其他对象。通常,答案是否。如果外部范围恰好是全局范围,则您可以作为属性访问变量全局对象的y轴(
窗口
在浏览器中).使用此.sample怎么样?
似乎完全脱离主题。据我所知,它处理的是变量可见性和作用域,而不是对象属性和函数调用上下文。更准确地说,是的,
此.sample
实际上可以在提供的代码中工作,但这只是因为假定它位于全局作用域和函数调用的默认上下文是
window
。因此这只是一种模糊的说法,“在全局范围内,您可以使用
window.sample
”使用这个.sample怎么样?
这个
似乎完全脱离主题。据我所知,它处理的是变量可见性和作用域,而不是对象属性和函数调用上下文。更准确地说,是的,
这个.sample
实际上可以在提供的代码中工作,但这只是因为假定它在全局作用域和函数调用的默认上下文是
window
。因此这只是一种模糊的说法,“在全局范围内,您可以使用
window.sample