多语言展示
当前在线:408今日阅读:4今日分享:26

js变量及其作用域(附例子及讲解)

Javascript和Java、C这些语言不同,它是一种无类型、弱检测的语言。它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量
工具/原料

Chrome 浏览器(以下代码测试均由Chrome调试)

方法/步骤
1

js变量的类型及申明方式等等,本文不再说明,读者可以参考相关官方文档这里主要介绍js变量及其作用域

2

js变量作用域可分为:'全局变量'和'局部变量''全局变量':申明在函数之外的变量'局部变量':申明在函数体中的变量,并且只能在当前函数体内访问,如:function(){var a = 0;}注:在申明变量是凡是没有var关键字,而直接赋值的变量均为全局变量

3

下面就通过几道小例子来熟悉下1、function test() {             a = 30;           var b = 20;     } test(); console.log('a='+a); //这里很明显,a为全局变量 console.log('b='+b);//b为局部变量,故在函数test外调用是,提示未定义

4

2、var a = 1;function test() {            console.log('a='+a); //这里a为undefined/*函数中声明的变量在整个函数中都有定义。如果函数内部有定义变量,即使在定义之前输出但会先执行后面定义语句,然后判断输出结果,所以说声明的变量在整个函数中都是起作用的。*/          var a = 2;     } test();

5

3、给两个小例子作为对比:var a; function fun() { a = 'global'; } console.log(a);//输出undefined

6

var a; function fun() { a = 'global'; } fun();console.log(a);//输出 global

7

对于上面这两个小例子,它们唯一的区别就是一个执行了fun函数,一个没有执行;如果就是var a;console.log(a);//由于a只定义,但没初始化,故输出undefined 而function fun(){...}中对a进行初始化,初始化操作实在fun函数作用域内,如果不执行fun()那么初始化操作也不会执行

8

4、函数域优先于全局域,故局部变量a会覆盖掉全局变量a    var a=1;    function main(){        var a=2;//局部变量        console.log(a);//2    }    main();   console.log(a);//1

9

5、javascript没有块级作用域function test(){   for(var i = 0 ; i < 3 ; i++){          //i=0,1,2,最后执行到i=3时退出循环   }   console.log(i);//3}test();相当于function test(){ var i;   for(i = 0; i < 3; i++){          //i=0,1,2,最后执行到i=3时退出循环   }   console.log(i);//3}test();END

推荐信息