在全局作用域中不受其影响的函数中传递的全局变量
Global variable passed in a function not affected by it on the global scope
首先,我很抱歉问这个问题,似乎之前问过,但是…在我发现的问题中,人们谈论作用域(我对这个概念很熟悉)或一些我不太理解的"回调"或"异步"事情。我问这个问题的原因是因为到目前为止,我所有的全局变量,通常都受到大量函数的影响。我的代码太大了,我不能粘贴在这里,但我会给你一个例子。
var ContainsSomeNumber = 50;
var AnObjectWithSomeValues ...
var TheFunctionInQuestion = function(nameRepresentingTheObject, nameRepresentingNumberVar){
if(nameRepresentingTheObject.lestSayName ==== "SomeString"){
nameRepresentingNumberVar+=5;
}
}
现在的事情是,它理解这两个变量,并得到正确的结果,当我把它们传递给函数,但是,ContainsSomeNumber变量仍然不受全局范围内的函数的影响。如果我放置一个警报或日志来显示它在函数中有多少,它会显示为55,这是应该的。但是,在函数成功运行之后(chrome和firefox没有显示任何错误),我试图在另一个地方访问修改后的全局变量,它返回相同的未修改值50。问题是因为我没有使用变量的硬编码版本来传递函数,还是什么?因为就像我说的,它以正确的方式观察和修改它,但只是在函数内部。不应该范围看到变量作为一个全局的,因为我没有写"var"在前面的一个我在函数中使用?我的意思是,我没有将它声明为一个新变量,加上它通常取它的全局值。为什么全局变量不被函数修改?
Javascript总是按值传递,但是当变量引用对象(包括数组)时,"值"是对对象的引用。因此,如果你想让一个函数在作用域之外修改一个变量,你应该传递一个对象并改变对象内部的一些属性。
var obj = {
ContainsSomeNumber: 50;
}
var AnObjectWithSomeValues ...
var TheFunctionInQuestion = function(nameRepresentingTheObject, obj){
if(nameRepresentingTheObject.lestSayName === "SomeString"){
obj.ContainsSomeNumber+=5;
}
}
或者你可以返回值:
var ContainsSomeNumber = 50;
var AnObjectWithSomeValues ...
var TheFunctionInQuestion = function(nameRepresentingTheObject, nameRepresentingNumberVar){
if(nameRepresentingTheObject.lestSayName === "SomeString"){
nameRepresentingNumberVar+5;
}
return nameRepresentingNumberVar
}
相关文章:
- 在javascript函数中设置全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 创建要在其他函数中使用的全局变量
- 函数中的innerHTML(全局变量?)
- 全局变量只能由第一个函数访问
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 更改函数内部的全局变量而不调用它
- 如何制作全局javascript函数和变量
- 改进js代码以删除全局变量和函数
- 调用函数后如何重置全局变量
- 无法在函数中检索全局变量的值
- 将全局变量传递给自调用函数或“IIFE”的目的
- 保留 JQuery Vars 用于另一个函数(全局变量?)
- 如何在 ajax 调用后更改包装器 JavaScript 函数中的全局变量
- 删除两个函数使用的全局变量
- 如何将socket.on中函数的值保存为全局变量
- angular/javascript无法识别函数内部的全局变量
- Javascript测试存根全局变量函数
- 在JavaScript中添加一个全局变量/函数(特别是NativeScript)
- Javascript从本地向全局变量函数添加行