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
”