假设globalX是一个全局对象变量。让我们定义一个接受该变量的函数,并在另一个函数内部获取相同的变量并更改其中的值。
var globalX = [];
function a1(globalX){
a2(globalX);
console.log(globalX);
//it shows "[]" not "[5,10]";
}
function a2(globalX){
globalX = [5,10];
}
a1(globalX);
当我安慰该变量时,控制台仅显示a2函数中a1未更改值的参数值。调用a2后如何引用更改的值?
答案 0 :(得分:1)
在浏览器环境中,您可以通过显式引用window
对象来引用全局变量:
var reallyGlobalX = window.globalX
在node.js中,没有window
个对象,但global
可用:
var reallyGlobalX = global.globalX
请注意,变量必须是全局的 - 如果它只是外部作用域中的另一个变量,则一旦变量被遮蔽,就无法到达它。
答案 1 :(得分:-1)
简短的回答是否。
较长的一个不是,因为JavaScript适用于范围。如果再次定义相同的变量,它将覆盖父变量。有一些技巧可以获得它,但它们都包含引用到父对象。以下是一些例子:
var start = 'start';
console.log(start); // 'start'
function test(start) {
console.log(start); // 'test' - you got no reference to previous start
}
test('test');
使用全局(窗口):
start = 'start'; // global, without var, at document/window level
function test(start) {
console.log(start); // test
console.log(this.start); // start, because THIS is window/document
}
test('test');
但请注意,此 可以可以更改。因此,没有真正的证据证明你能够得到它。
有时您可以这样做:
function main() {
this.start = 'start';
return function(start) {
console.log(start); // 'test'
console.log(this.start); // 'start'
}
}
var class = main();
class.test('test');
这一切都取决于你的结构,如果你将你的东西包装在函数中。 最佳做法是使用不同的名称。在某些语言中,通常使用_
为变量添加前缀,例如_start
,这意味着它们是member
变量(尽可能最高级别)。有些人甚至为参数的变量(start_
)加上后缀,以便他们知道发生了什么。我不喜欢那样,但仍然。