2016-05-26 115 views
0

对不起,如果标题与我的问题不匹配,因为我不能用单词解释它,但仅用一个例子。操作函数中的全局变量

这是一个非常简单的例子,我的代码是不一样的和更长的时间:

var i=0; 
first(); 
function first() 
{ 
    i=1; 
    second(i); 
} 
function second(number) 
{ 
    number=2; 
} 

我试过这段代码,它返回1

我想这里是修改我的全局变量,对我的函数说第二个“嘿,你将永远修改全局变量,但我通过你参考的是你必须修改的那个”

如果有人有答案,会很棒!他可以节省很多行:D

在此先感谢。

+0

它总是用'value' – Rayon

+0

难以理解通过。数字变量在哪里定义?你要返回的变量是什么? '我'还是'号码'?为什么你在函数中重写'number'作为参数?我真的不明白你想要的成就。 –

回答

0

也许传递变数名称作为一个字符串解决您的问题...

var globalVar = 0; 
 

 
first(); 
 
function first() { 
 
    globalVar = 1; 
 
    changeGlobal('globalVar'); 
 
} 
 
function changeGlobal(v) { 
 
    window[v] = 2; 
 
} 
 

 
document.body.innerHTML = 'globalVar: '+globalVar;

+0

我试过你的代码与https://jsfiddle.net,但我有1显示,当我尝试它与stackoverflow我有2 ...:/ –

+0

这可能是一个上下文问题...如果代码运行在一个'frame' /'iframe'你可能需要检查哪个'window'对象持有你的变量......也许试着用'top'替换'window'' – rafaelcastrocouto

+0

top不显示任何内容。不知道是否需要信任jsfiddle ... –

0

原始值一样整数由值在Javascript中过去了。这意味着first()将始终将i设置为1. Second()基本上是no-op。

这应该实现你想什么:

var i=0; 
first(); 
function first() 
{ 
    i=1; 
    i=second(i); 
} 
function second(number) 
{ 
    number=2; 
    return number; 
} 
+0

“second”的参数无用且令人困惑,然后 – floribon

+0

代码只是一个示例。我不能在这个例子中返回数字,因为在我编程的代码中,我需要做一个.push()。 –

+0

如果你想改变一个全局,你可以改变global:function second(){i = 2}。或者你可以将我包裹在一个通过引用传递的对象中。作为一个警告,让全局变异的全局变量是一个非常糟糕的做法。 – simoraman