首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c语言局部变量、全局变量、静态变量、内部函数、外部函数、声明、定义、extern作用总结

一、先搞一波概念 变量作用域分: 1.局部变量: (1)在函数的开头定义定义形参)。   (2)在函数内部定义(如在函数里面定义变量)。   ...(3)在函数内部的复合语句定义for循环,花括号内)。   前两种方式定义变量可以在函数内任何地方使用,而第三种方式定义变量只能在复合语句内使用。...说明: (1)不同函数\同一函数不同复合语句,可以使用同名变量,它们表示不同对象,互不干扰。...(auto),形参等,在程序中推荐使用,也是使用最多的一个变量 (2)静态局部变量(格式:static):   使用关键字static来定义,在函数调用完不释放空间,在下次调用时,还保留上一次的值。...(4)外部变量局部变量都只能定义一次,但外部变量可以声明多次,而局部变量不能有声明。 (5)所谓变量的声明,只是把作用域扩张到声明处以下,仅仅而已,而且只有这一种声明方法。

3K82
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript匿名函数与闭包

) { for (var i = 0; i<count; i++) {} })(); alert(i);//报错,无法访问 } box(2); 使用了块级作用域(私有作用域)后,匿名函数中定义的任何变量...这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。一般来说,我们都应该尽可能少向全局作用域中添加变量和函数。...任何在函数中定义变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。...可以使用静态私有变量来避免这个问题。 静态私有变量 通过块级作用域(私有作用域)中定义私有变量或函数,同样可以创建对外公共的特权方法。...增强的模块模式,这种模式适合返回自定义对象,也就是构造函数。

71750

JS学习系列 02 - 词法作用

两种作用域 “作用域”我们知道是一套规则,用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找。 作用域有两种主要工作模型:词法作用域和动态作用域。...都是分别定义在全局作用域中的函数,它们是并列的,所以在 foo1 的作用域链中并不包含 foo2 的作用域,虽然在 foo2 中调用了 foo1,但是 foo1 对变量 a 进行 RHS 查询时,在自己的作用域没有找到...因为 eval("var a = 10;") 在 foo 的作用域中新创建了一个同名变量 a,引擎在 foo 作用域中对 a 进行 RHS 查询,找到了新定义的 a,值为 10,所以不再向上查找全局作用域中的...with 可以将一个没有或有多个属性的对象处理为一个完全隔离的词法作用域,因此这个对象的属性也会被处理为定义在这个作用域中的词法标识符。...,类似于 with 一样,catch 中定义局部变量也都会添加到包含 try...catch 的函数作用域(或全局作用域)中。

1.1K30

Node.js内存管理中的那些事

同时因为该作用域中声明的局部变量分配在该作用域上,随作用域的销毁而销毁。只被局部变量引用的对象存活周期较短。代码中,由于对象较小,将会分配在新生代的Form空间中。...作用域失效后,局部变量local失效,其引用的对象将会在下次垃圾回收时被释放。...作用域中变量查找回收 JavaScript在执行时会查找变量定义在哪,最先查找的当前作用域,当前作用域没有,会向上级的作用域查找,直到最顶层全局作用域查到,如果没有最后返回undefine。...变量的主动释放回收 如果变量是全局变量(通过var声明或定义在global变量上),全局作用域直到进程退出才能释放,这种情况将导致引用的对象常驻内存(常驻在老生代中)。...这种需要释放常驻内存中的对象,可以使用delete操作来删除引用关系,或者将变量重新赋值,让旧对象脱离引用关系(也就是对象的引用即所占的内存空间原本指向某个变量现在指向空获未定义),这样在接下来的老生代内存

1.7K20

JavaScript作用

作用域的概念作用域是指定义变量和函数的可访问范围。在JavaScript中,作用域可以分为全局作用域和局部作用域。全局作用域:全局作用域是在整个代码中都可访问的范围。...在全局作用域中定义变量和函数可以在代码的任何位置使用。局部作用域:局部作用域是在特定代码块(函数内部)中定义的范围。在局部作用域中定义变量和函数只能在其所在的代码块内部使用。...作用域的类型除了全局作用域和局部作用域,JavaScript还有其他类型的作用域,包括函数作用域、块级作用域和词法作用域。函数作用域:在函数内部定义变量具有函数作用域,只能在函数内部访问。...报错,x不在全局作用域中可访问块级作用域:块级作用域是在代码块(if语句、循环、{}内部)中定义作用域。...在ES6之前,JavaScript没有块级作用域,只有函数作用域和全局作用域。从ES6开始,引入了let和const关键字,可以在块级作用域中定义变量

24610

深入了解Python 变量作用

是新的局部变量,而不是重新定义,却没有绑定 test_scopt() Python中的模块代码在执行之前,并不会经过预编译,但是模块内的函数体代码在运行前会经过预编译,因此不管变量名的绑定发生在作用域的那个位置...、赋值);这种变量名的绑定将在当前作用域中引入新的变量,同时屏蔽外层作用域中的同名变量。...L(local)局部作用局部变量:包含在def关键字定义的语句块中,即在函数中定义变量。每当函数被调用时都会创建一个新的局部作用域。...G(global)全局作用域 即在模块层次中定义变量,每一个模块都是一个全局作用域。也就是说,在模块文件顶层声明的变量具有全局作用域,从外部开来,模块的全局变量就是一个模块对象的属性。...注意:全局作用域的作用范围仅限于单个模块文件内 B(built-in)内置作用域 系统内固定模块里定义变量定义在builtin 模块内的变量

99821

Python 作用域和命名空间

重新绑定在最内层作用域以外找到的变量,可以使用 nonlocal 语句声明为非本地变量。...如果没有被声明为非本地变量,这些变量将是只读的(尝试写入这样的变量只会在最内层作用域中创建一个 新的 局部变量,而同名的外部变量保持不变)。...通常,当前局部作为域将(按字面文本)引用当前函数的局部名称。 在函数以外,局部作用域将引用与全局作用域相一致的命名空间:模块的命名空间。 类定义将在局部命名空间内再放置另一个命名空间。...删除也是如此:语句 del x 会从局部命名空间的引用中移除对 x 的绑定。 事实上,所有引入新名称的操作都使用局部作用域:特别地,import 语句和函数定义会在局部作用域中绑定模块或函数名称。...global 语句可被用来表明特定变量生存于全局作用域并且应当在其中被重新绑定;nonlocal 语句表明特定变量生存于外层作用域中并且应当在其中被重新绑定。 9.2.1.

69050

JavaScript高级程序设计(读书笔记)(七)

闭包还可以用于在对象中创建私有变量,相关概念和要点如下: 及时JavaScript中没有正式的私有对象属性的概念,但可以使用闭包来实现公有方法,而通过公有方法可以访问在包含作用域中定义变量; 有权访问私有变量的公有方法叫做特权方法...一般来讲,当函数执行完毕后,局部活动对象就会被销毁,内存中仅保存全局作用域(全局执行环境的变量对象)。但是,闭包的情况又有所不同。...可是在JavaScript中,变量i是定义在outputNumbers()的活动对象中的,因此从它有定义开始,既可以在函数内部随处访问它。即使像下面这样错误的重新声明同一个变量,也不会改变它的值。...任何在函数中定义变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。私有变量包括函数的参数、局部变量和在函数内部定义的其它函数。...在私有作用域中,首先定义了私有变量和私有函数,然后又定义了构造函数及其公有方法。公有方法是在原型上定义的,这一点体现了典型的原型模式。

61020

面试官:说说JS作用域和作用域链,我是这样回答的

: inVariable is not defined//inVariable是在Fun函数内部被定义的,属于局部变量,在外部无法访问,于是会报错从存储上来解释的话,作用域本质上是一个对象作用域中变量可以理解为是该对象的成员总结...于是从它的上一级,也就是全局作用域中找,//在全局中a被赋值为100,于是输出100 console.log(b)//200 fun函数局部作用域中变量b,并且它被赋值为了200,输出200}fun...作用域能够减轻命名的压力。我们可以在不同的作用域内定义相同的变量名,并且这些变量名不会产生冲突。1.什么是作用域概念:作用域是在程序运行时代码中的某些特定部分中变量、函数和对象的可访问性。...: inVariable is not defined//inVariable是在Fun函数内部被定义的,属于局部变量,在外部无法访问,于是会报错从存储上来解释的话,作用域本质上是一个对象作用域中变量可以理解为是该对象的成员总结...于是从它的上一级,也就是全局作用域中找,//在全局中a被赋值为100,于是输出100 console.log(b)//200 fun函数局部作用域中变量b,并且它被赋值为了200,输出200}fun

64130

前端学习(34)~js学习(十一):作用域和变量提升

局部变量定义在函数作用域的变量,叫「局部变量」。 在函数内部,使用 var 声明的变量局部变量。 函数的形参也是属于局部变量。...如果没有则向上一级作用域中寻找,直到找到全局作用域;如果全局作用域中依然没有找到,则会报错 ReferenceError。 在函数中要访问全局变量可以使用window对象。...在全局作用域中: 创建的变量都会作为window对象的属性保存。比如在全局作用域内写 var a = 100,这里的 a 等价于 window.a。...提醒2:定义形参就相当于在函数作用域中声明了变量。...(ES6之前) 在其他编程语言中( Java、C#等),存在块级作用域,由{}包括起来。

71410

你应该避免的5个常见 Python 错误

全局变量局部变量命名冲突 假设已经定义了一个名为 app_config 的全局变量,并且希望在 init_config 函数中使用它,如下所示: app_config = "app.ini" def...这是由于每当有赋值表达式时,Python 都会尝试在局部作用域中创建一个变量,而且由于局部变量和全局变量具有相同的名称,全局变量被隐藏在局部作用域中。...因此 Python 会抛出一个错误,说在初始化之前使用了局部变量 app_config。...在 python 中,空序列对象“”(空字符串)、 list、 set、 dict、 tuple 等,都被计算为 False,在任何数字格式(0和0.0)中也是零。...那么为什么 event_time 的默认值不起作用呢? 要回答这个问题,你应该知道变量绑定发生在函数定义期间。对于上面的示例,在最初定义函数时分配了 event_time 的默认值。

85710

python基础教程:作用域和命名空间

重新绑定在最内层作用域以外找到的变量,可以使用nonlocal语句声明为非本地变量。...如果没有被声明为非本地变量,这些变量将是只读的(尝试写入这样的变量只会在最内层作用域中创建一个新的局部变量,而同名的外部变量保持不变)。...删除也是如此,语句del x会从局部命名空间的引用中移除对x的绑定。事实上,所有引入新名称的操作都使用局部作用域,特别是import语句和函数定义会在局部作用域中绑定模块或函数名称。...global语句可被用来表明特定变量生存于全局作用域并且应当在其中被重新绑定;nonlocal语句表明特定变量生存于外层作用域中并且应当在其中被重新绑定。...命令空间和作用域总结: 命名空间定义了一个名称的范围,作用域指定了能看到命名空间的文本区域(代码)。

57140

关于JS中的作用域中的沉思

话说回来,在这段代码中,我们使用了with语句关联了obj对象,这就意味着在with代码块内部,每个变量首先被认为是一个局部变量,如果局部变量与obj对象的某个属性同名,则这个局部变量会指向obj对象属性...┑( ̄Д  ̄)┍ let 在局部作用域中,关键字let、const倒是很常见了,先说说说let,其是ES6新增的定义变量的方法,其定义变量仅存在于最近的{}之内。...的声明语句,如果找到则直接使用,否则继续向上一级作用域中去寻找var的声明语句,如未找到,则继续向上级作用域中寻找…直到全局作用域中还未找到var的声明语句则自动在全局作用域中声明该变量。...在一个函数内部定义的函数,闭包中会将外部函数的自由对象添加到自己的作用域中,所以可以通过内部函数访问外部函数的属性,这就是js模拟私有变量的一种方式。...,由于其的存在,使for中的i存在于局部作用域中,而不是再全局作用域。

86400

4.2 执行上下文与作用

如果上下文是函数,则其活动对象用作变量对象(最初只有一个定义变量:arguments「全局上下文没有这个变量」),通过包含上下文向作用域链添加变量对象,直到全局上下文。...全局上下文的变量对象始终是作用域链的最后一个变量对象 作用域链增强 执行上下文主要有全局上下文和函数上下文两种。但也有其他方式来增强作用域链。:with语句会向作用域链前段临时添加指定的对象。...;qs是上面定义变量定义在 // 函数上下文的变量对象上 let url = href + qs; } // 因为 url使用let声明,被限制在块级作用域中...var声明会被拿到函数或全局作用域的顶部,位于作用域中所有代码之前。...赋值为对象的const变量不能再被重新赋值为其他引用值,但对象的键则不受限制。

32520

面试官问我:什么是JavaScript闭包,我该如何回答?

什么是闭包(Closure) 简单讲,闭包就是指有权访问另一个函数作用域中变量的函数。 MDN 上面这么说:闭包是一种特殊的对象。 它由两部分构成:函数,以及创建该函数的环境。...环境由闭包创建时在作用域中的任何局部变量组成。 这种官方的概念是比较难理解的,在面试的时候说出来也不是很专业,因为没办法有个具体的逻辑。...当arrFunc执行完毕后,其作用域被销毁,但它的变量对象仍保存在内存中,得以被匿名访问,这时i的值为10。...闭包中的this对象 在上面这段代码中,obj.getName()()实际上是在全局作用域中调用了匿名函数,this指向了window。...任何在函数中定义变量,都可以认为是私有变量,因为不能在函数外部访问这些变量。私有变量包括函数的参数、局部变量和函数内定义的其他函数。

43210

08 内部类(嵌套类)

非静态成员类 与静态内部类不同,除了静态变量和方法,成员内部类还可以直接访问外部类的实例变量和方法, innerMethod 直接访问外部类私有实例变量a。...局部类的特性 局部类有如下两个有趣的特性: 和成员类一样,局部类和外层实例关联,而且能访问外层类的任何成员,包括私有成员; 除了能访问外层类定义的字段之外,局部类还能访问局部方法的作用域中声明为...局部类的限制 局部类的名称只存在于定义它的块中,在块的外部不能使用。(但是要注意,在类的作用域中创建的局部类实例,在这个作用域之外仍能使用。稍后本节会详细说明这种情况。)...接口、枚举类型和注解类型不能局部定义局部类和成员类一样,不能与任何外层类同名。 前面说过,局部类能使用同一个作用域中局部变量、方法参数和异常参数,但这些变量或参数必须声明为 final。.../ 但是在数组中保存有这个类的 10 个有效实例 // 局部变量fi现在已经不在作用域中了 // 但仍然在那10个对象 getValue()方法的作用域中 // 因此,可以在每个对象上调用

63510

javascript中function用法_年终总结反思不足之处

基本类型值得传递如同基本类型变量的复制一样,引用类型值的传递如同引用类型变量的复制一样。很多人错误认为:在局部作用域中修改的对象会在全局作用域中反映出来这就说明是按引用传递的。...在私有作用域中访问变量 count ,是因为这个匿名函数是一个闭包,它能访问包含作用域的所有变量。这种技术经常在全局作用域中被用在函数外部从而限制向全局作用域中添加过多的变量和函数。...不过有私有变量的概念,任何在函数中定义变量,都可认为是私有变量,因为不能在函数外部访问这些变量。私有变量包括函数的参数,局部变量,在函数内定义的其他函数。...静态私有变量 通过在私有作用域中定义私有变量和函数,也可以创建特权方法。...结果就是函数内部的所有变量都会被立即销毁除非将某些变量赋值给了包含作用域中变量 闭包还可用于在对象中创建私有变量 通过闭包来实现公有方法,通过公有方法可以访问在包含作用域中定义变量

45810

JavaScript 进阶 - 第1天

作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问,作用域分为全局作用域和局部作用域。 1.1 局部作用局部作用域分为函数作用域和块作用域。...; // 报错 JavaScript 中除了变量外还有常量,常量与变量本质的区别是【常量必须要有值且不允许被重新赋值】,常量值为对象时其属性和方法允许重新赋值。... // 此处是全局 function sayHi() { // 此处为局部 } // 此处为全局 全局作用域中声明的变量,任何其它作用域都可以被访问.../assets/scope.png)] 作用域链本质上是底层的变量查找机制,在函数被执行时,会优先查找当前函数作用域中查找变量,如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域,如下代码所示...相同作用域链中按着从小到大的规则查找变量作用域能够访问父作用域,父级作用域无法访问子级作用域(就近原则) 1.4 闭包 闭包是一种比较特殊和函数,使用闭包能够访问函数作用域中变量

78920
领券