learner_pu
2017-04-20 23:32
采纳率: 20%
浏览 5.9k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

12条回答 默认 最新

  • blownewbee 2017-04-21 00:37
    已采纳

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

    点赞 6 评论
  • 卐兜兜飞卍 2017-04-21 01:21

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

    点赞 评论
  • 半杯凉月 2017-04-21 02:32

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

    点赞 评论
  • a877416236 2017-04-21 03:37

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

    点赞 评论
  • 6个小石头 2017-04-24 00:33

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

    点赞 评论
  • yangymy 2017-04-24 02:01

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

    点赞 评论
  • res_min 2017-04-25 10:06

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

    点赞 评论
  • 游走的Web瞎子 2017-04-27 07:51

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

    点赞 评论
  • onesidego 2017-05-02 03:47

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

    点赞 评论
  • 欧尔迈特1994 2017-05-02 03:49

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

    点赞 评论
  • LazyBoy_Z_z 2017-05-02 06:31

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

    点赞 评论
  • qq_30137767 2019-08-01 19:06

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

    点赞 评论

相关推荐 更多相似问题