多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 局部变量和全局变量之间的差异 > 原文: [https://www.guru99.com/local-vs-global-variable.html](https://www.guru99.com/local-vs-global-variable.html) ## 什么是变量? 变量是分配给程序可以操作的存储区的名称。 变量类型决定了变量的内存大小和布局。 它还确定需要存储在该内存中的值的范围以及可以应用于该变量的操作的性质。 在本教程中,您将学习 * [变量范围](#1) * [局部变量](#2)的定义 * [全局变量](#3)的定义 * [局部变量与全局变量](#4) * [使用全局变量](#5)的优势 * [使用局部变量](#6)的优势 * [使用全局变量](#7)的缺点 * [使用局部变量](#8)的缺点 * [还有什么用?](#9) ## 变量范围 变量的范围只是变量的生存期。 它是代码所适用或存在的代码块。 例如: ``` function foo(){ var x; } ``` 您可以在函数“ foo”中声明变量“ x”。 该变量的范围保留在该函数内部,不能在该函数外部使用。 您可以在三个位置声明变量的编程语言: * 在函数或块内:局部变量 * 所有功能之外:全局变量 * 在功能参数的定义中:形式参数 ## 局部变量的定义 局部变量是在编程块或子例程中声明的变量的类型。 它只能在声明它们的子例程或代码块内使用。 局部变量将一直存在,直到执行该功能块为止。 之后,它将被自动销毁。 **局部变量**的示例 ``` public int add(){ int a =4; int b=5; return a+b; } ``` 这里,“ a”和“ b”是局部变量 ## 全局变量的定义 全局变量在子例程或函数之外定义。 全局变量将在程序的整个生命周期内保持其值。 可以在为该程序定义的任何功能中访问它们。 例: ``` int a =4; int b=5; public int add(){ return a+b; } ``` 在这里,“ a”和“ b”是全局变量。 ## 局部变量 Vs。 全局变量 ![](https://img.kancloud.cn/70/03/700335161618e58f49e72a45ea47339a_601x168.png) 这里是局部变量和全局变量之间的一些根本区别。 | **参数** | **本地** | **全局** | | 范围 | 它在函数内部声明。 | 它在函数外部声明。 | | 值 | 如果未初始化,则会存储垃圾值 | 如果未初始化,则默认存储零。 | | 一生 | 它在函数开始执行时创建,在函数终止时丢失。 | 它是在程序的全局执行开始之前创建的,并在程序终止时丢失。 | | 资料共享 | 由于只能通过一个功能访问局部变量的数据,因此无法进行数据共享。 | 由于多个功能可以访问相同的全局变量,因此可以进行数据共享。 | | 参量 | 局部变量需要参数传递才能访问其他函数中的值 | 全局变量不需要参数传递,因为它在整个程序中都是可见的 | | 修改变量值 | 当在一个函数中修改局部变量的值时,更改在另一函数中不可见。 | 当在一个函数中修改了全局变量的值时,在其余程序中可见更改。 | | 被访问 | 局部变量可以在声明它们的函数内部的语句帮助下进行访问。 | 您可以通过程序中的任何语句访问全局变量。 | | 记忆体储存 | 除非指定,否则它存储在堆栈中。 | 它存储在编译器确定的固定位置上。 | ## 使用全局变量的优点 * 您可以从程序中的所有功能或模块访问全局变量 * 您只需要一次在模块外部声明全局变量。 * 它理想地用于存储“常量”,因为它可以帮助您保持一致性。 * 当多个函数正在访问同一数据时,全局变量很有用。 ## 使用局部变量的优点 * 使用局部变量可确保在任务运行时变量的值保持不变 * 如果多个任务更改了同时运行的单个变量,则结果可能无法预测。 但是将其声明为局部变量可以解决此问题,因为每个任务都会创建自己的局部变量实例。 * 您可以在不同的函数中给局部变量起相同的名称,因为它们只能由声明它们的函数识别。 * 一旦任何函数结束,局部变量将被删除并释放其占用的内存空间。 ## 使用全局变量的缺点 * 太多的变量声明为全局变量,然后它们保留在内存中,直到程序执行完成。 这可能会导致内存不足问题。 * 数据可以通过任何功能进行修改。 程序中编写的任何语句都可以更改全局变量的值。 在多任务环境中,这可能会带来不可预测的结果。 * 如果由于代码重构而中断了全局变量,则需要更改调用它们的所有模块。 ## 使用局部变量的缺点 * 局部变量的调试过程非常棘手。 * 由于模块之间无法共享数据,因此需要重复传递的通用数据。 * 它们的范围非常有限。 ## 还有什么用? 用任何语言编写程序时,局部变量和全局变量同等重要。 但是,大量的全局变量可能会占用大量内存。 全局变量的不良更改变得难以识别。 因此,建议避免声明不需要的全局变量。 ## 关键区别 * 局部变量在函数内部声明,而全局变量在函数外部声明。 * 局部变量在函数开始执行时创建,而在函数终止时丢失,而全局变量在执行开始时创建,而在程序结束时丢失。 * 局部变量不提供数据共享,而全局变量提供数据共享。 * 局部变量存储在堆栈上,而全局变量存储在编译器确定的固定位置上。 * 局部变量需要传递参数,而全局变量则不需要传递参数