码迷,mamicode.com
首页 > Web开发 > 详细

js变量及其作用域

时间:2015-12-15 14:15:59      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

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

 
一、js变量的类型及申明方式

var i=100;//Number类型 

var i="variable";//String类型 
var i=false;//boolen类型
var i={x:4};//Object类型 
var i=[1,2,3];//Array类型
前三种是基本类型,后两种为引用类型
1.引用类型相对基本类型可以为其添加属性方法
2.基本类型被复制于另一个变量时,会在该变量对象创建一个新值,然后把值复制到为新变量分配的位置上,而引用类型引用的都是同一个对象。
 
JS中变量申明分显式申明和隐式申明。 
var i=100;//显式申明 
i=100;//隐式申明 
在函数中使用var关键字进行显式申明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量。   
当我们使用访问一个没有声明的变量时,JS会报错。而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量,这一点一定要注意。
 
 
二、js变量作用域

js变量作用域可分为:"全局变量"和"局部变量"

"全局变量":申明在函数之外的变量

"局部变量":申明在函数体中的变量,并且只能在当前函数体内访问,如:function(){var a = 0;}

注:在申明变量是凡是没有var关键字,而直接赋值的变量均为全局变量

示例:

下面就通过几道小例子来熟悉下

1、function test() {  

           a = 30; 

          var b = 20;

     }

 test();

 console.log("a="+a); //这里很明显,a为全局变量

 console.log("b="+b);//b为局部变量,故在函数test外调用是,提示未定义

 

2、

var a = 1;

function test() {  

          console.log("a="+a); //这里a为undefined

         /*函数中声明的变量在整个函数中都有定义。如果函数内部有定义变量,即使在定义之前输出但会先执行后面定义语句,然后判断输出结果,所以说声明的变量在整个函数中都是起作用的。*/

          var a = 2;

     }

 test();

 

3、

给两个小例子作为对比:

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

 

var a; function fun() { a = "global"; } 

fun();console.log(a);//输出 global

 

对于上面这两个小例子,它们唯一的区别就是一个执行了fun函数,一个没有执行;

如果就是

var a;console.log(a);//由于a只定义,但没初始化,故输出undefined 

而function fun(){...}中对a进行初始化,初始化操作实在fun函数作用域内,如果不执行fun()那么初始化操作也不会执行

4、函数域优先于全局域,故局部变量a会覆盖掉全局变量a

    var a=1;

    function main(){

        var a=2;//局部变量

        console.log(a);//2

    } 

   main();

   console.log(a);//1

 

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();

 

 

js变量及其作用域

标签:

原文地址:http://www.cnblogs.com/gzydwebkf/p/5048007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!