如何引用函数参数中已引用的全局变量?

时间:2015-06-02 14:49:44

标签: javascript

假设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后如何引用更改的值?

2 个答案:

答案 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_)加上后缀,以便他们知道发生了什么。我不喜欢那样,但仍然。