变量的作用域问题

变量的作用域:

变量的作用域是变量的生命期和作用范围,它取决于变量的声明位置。根据作用域的不同可以将变量划分为局部变量和
全局变量;局部变量在过程的内部声明而具有局部作用域,过程外部任何命令都不能访问,每次执行过程创建的变量均随此
过程的结束而销毁;全局变量在过程的外部声明而具有全局作用域其值能被ASP页面上的任何脚本命令访问和修改,全局变
量随脚本运行的结束而消亡。

在JS中没有块级作用域,{}就是一个块,但是JS没有这样的块级作用域,因为在if或是while或是for等等{}设置的变量是可以被外部或是全局使用域访问的。

JS中只有两个作用域,一个是局部作用域(函数的内部),一个是全局作用(两个script之间)。

函数内是可以访问全局作用域的成员。

全局作用域是无法访问函数内部的变量的。

例:<script>    function f1(){ // b  c  没有var声明,是属于全局变量        var a = b = c = 9;        console.log(a);        console.log(b);        console.log(c);

    f1();    console.log(c);    console.log(b);    console.log(a); // 当前作用域内没有变量a因此报错了

</script>

在控制台输出结果如下:

函数的预解析:

就是JS是执行代码之前,会将所有的代码先提前扫描一遍,将变量的声明和函数的声明会提到,当到作用域(全局或局部)的最前面。

在做面试题的,一定要注册JS的预解析机制。

时间: 2024-10-12 17:45:13

变量的作用域问题的相关文章

第四章—变量,作用域和内存问题(二)

第四章-变量,作用域和内存问题(二) JS没有块级作用域 js没有块级作用域,这个概念容易导致误解,这里就区分下几个情况,大家好好参考下: 我们知道,在其他类C的语言中,由花挂号封闭的代码块都有自己的作用域.但是在JS中,却没有块级作用域: 这里if(true){}代表条件永真,永远执行这条.if(false){}的话就是永远不执行这条. 这个代码执行之后,在if语句定义的变量,在if语句外可以访问的到.在if语句中的变量声明会将变量添加到当前的执行环境中(这里是全局环境). 还有如下的两个例子

Js中变量的作用域

一.理解函数作用域需要理解以下几点:    1.函数变量的作用域有全局变量和局部变量两种,全局变量写在函数的最前面,局部变量写在函数体内,局部变量省略了var 也就默认成为了全局变量!    2.函数体内部可以读取到函数外的变量,而函数外不能读取到函数内的变量! 在理解了函数变量的作用域之后,也需要理解函数的作用域链了:    1.每一个函数都有一个与之相关的作用域链,当js在查找变量X时,它会从链的第一个对象开始查找,如果这个对象有一个名为X的属性值,则会直接使用这个 属性值,如果没有就继续下

C的日记-变量的作用域、生存期和内存位置

“天地玄黄,宇宙洪荒”,先有天地,之后方有古今.变量同是,先有变量的作用域(存在的地点),然后出现了变量的生存期(存在的时间). [变量存储的方式]首先变量实际上是存放到两个区域的: 静态存储区:是指在程序运行区间由系统分配固定的存储空间的方式. 动态存储区:程序运行期间根据需要动态的分配存储空间. [变量分类] 局部变量:在[函数]内部声明的变量. [作用域]:从定义变量的位置到本函数结束. <1>自动变量(auto变量),即动态局部变量,不专门声明为static的变量.          

javaScript定义函数的三种方式&amp;amp;变量的作用域

一.函数定义 方式1.普通方式定义函数 function 函数名(參数n){ 函数体 } function add(a,b){ return a+b; } 方式2.直接量定义函数 var 函数名=function(參数n){ 函数体 } var add=function(a,b){ return a+b; } 方式三.构造方式定义函数 var 函数名=new Function(參数n,函数体); var add = new Function('a,b','return a+b;'); 二.变量的

Java中的变量与变量的作用域

关于Java中的变量及变量的作用域 关于Java中的变量及变量的作用域 0. 变量的概念 在程序运行期间,系统可以为程序分配一块内存单元,用来存储各种类型的数据.系统分配的内存单元要使用一个标记符来标识,这种内存单元中的数据是可以更改的.所有叫变量.定义变量的标记符就是变量名,内存单元中所装载的数据就是变量值.用一个变量定义一块内存以后,程序就可以用变量名代表这块内存中的数据.根据所存储数据类型的不同,有各种不同类型的变量. 1. Java的变量类型 2. 注意变量的有效取值范围 系统为不同的变

&lt;02&gt;关键字+标识符+常量表示+变量+作用域

标识符命名的规范 规范的内容:1)起一个有意义的名称  2)一般情况下遵守驼峰命名法 核心的思想: 1.如果一个标示符有多个单词组成 1)第一单词的首字母小写,其他单词的首字母都大写 2)或者所有的单词的首字母都大写 ------------------------------------------------ 常量的概述及分类 计算机中的常量:表示固定不变的数据,用常量来表示 常量的分类:整形常量.实型常量.字符常量.字符串常量 不同类型的常量表示方法 1)10进制整形常量(计算默认的使用1

变量和作用域的小结

有代码如下: var a = 5; function A(){ alert(a); var a = 10; alert(this.a); } new A(); 结果: undefined  undefined 第一个是变量提升,相当于 var a = 5; function A(){ var a ; alert(a);    //undefined a = 10;   //L3 alert(this.a); } new A(); 第二个,首先声明a是一个全局变量,函数A中又声明了一个局部变量,所

oc中的构造方法和description方法,变量的作用域,

1.构造方法的声明和实现 //声明 - (id) initWithAge:(int) age andNo: (int) no; //实现 - (id) initWithAge:(int) age andNo: (int) no { self=[super init];//调用父类的init方法初始化 //判断对象是否为空 也可以直接写if(self) 或 if(self=[super init]) if(self!=nil) { _age=age; _no=no; } return self;

黑马程序员 02-成员变量的作用域

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— 1.作用域基本概念 局部变量.全局变量都有自己的作用域,成员变量也不例外. 作用域的概念:在什么范围内可以访问,这个范围就是作用域. 2.成员变量的作用域类型 @public         在任何地方都可以直接访问 @protected    可以在当前类与子类的实现@implementation中直接访问,外界想访问只能用set  get方法访问 @private        只能在当前类的实现@im

python变量和作用域

1.作用域介绍 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:globa,全局变量,就是模块级别定义的变量: B:built-in,系统固定模块里面的变量,比如int, bytearray等. 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB. x = int(2.9) # int