为什么不能使用全局变量来在函数间传递函数和结果

为什么不能使用全局变量来在函数间传递函数和结果,大神求解答,

可以这么做,但是这是不好的习惯。有几个原因:
全局变量只有一个,如果你的函数存在递归调用,那么将导致程序错误。
同样的原因,全局变量导致多线程的程序无法并发执行。
使用全局变量使得函数存在副作用(调用一个函数,对函数以外的数据/状态的改变,称之为副作用),这使得对函数调用顺序敏感的代码结果变得不可预测。降低代码的可读性。
依赖全局变量的函数,没办法单独提取出来,在另一个项目中不加更改的重复使用。
使用全局变量的函数,它很难单独地测试。

容易造成变量污染 如1l所说

当然可以,但是你要保证并发时安全性(PS:这是个不好的习惯)

传进函数的变量尽量也不要直接引用,重新new个变量

使用全局变量使得函数存在副作用(调用一个函数,对函数以外的数据/状态的改变,称之为副作用),这使得对函数调用顺序敏感的代码结果变得不可预测。降低代码的可读性。

这种最好还是在数据库加一个字段,存储数值。

全局变量可以在函数直接传递,但是在具体的方法书写时 你得考虑你的变量的安全性,如果是很重要的信息等,建议不要再全局中调用,
而且全局变量的定义 ,在团队协作中也是不好的使用习惯,比如说后续有人对这个全局变量进行了重新赋值等操作 ,这样都是对团队不负责的书写习惯。

全局变量可以用,不过不要用太多,最好一个就好了吧,用太多的话代码段还没执行完就不会回收,
所以更多的是用局部变量,执行完了之后立即销毁回收。
在函数间传递函数或结果与用全局变量没什么关系吧,函数间是值传递,数值传递数值,引用就传
递引用(总之传递栈里面的值),在函数里声明的参数是局部的,即使与全局变量同名,也是两个
不同的东西。

全局变量可易使用,很方便,但最后少用,如果控制不好会引起数据错误,刷新不及时等问题!

很多情况下我们使用全局变量是必要的,比如如果窗体中的一个操作频率较高,同时此操作所需数据是从数据库调用的,
这种情况下我们定义全局变量,然后定义一个刷新全局变量数据的频率(五分钟或者多少分钟刷新一次)效果比每次不停的查询数据库好多了
当然,在存在并发的情况下全局变量是存在问题的,有一个解决办法,就是lock,每次赋值全局变量的时候加锁,线程访问不到自动抛出。
我说的方法可能不太成熟,仅代表个人意见。

这个问题要需要考虑到数据安全问题和程序的可读性,全局变量的表面意思是该类中所有的方法 都能对其进行操作,这种做法方便时是方便
,但如果多个方法同时对全局变量进行修改和取值时会发生并发问题,而且会降低程序的可读性。
所以全局变量一般和java提供的java.lang.ThreadLocal一起使用

如果一个一个全局变量是以一个结构体指针的形式传递进去,而且这个全局变量只给中断函数用,这样虽然很多次并发调用,但每次都是操作不同的全局变量,这样应该是可重入函数,很多资料都没有说明这个情况,不是所有调用函数用到全局变量都是不可重入函数,如果全局变量发生内在函数内调用,并且其他并发程序中也用到此变量可能是不可重入函数