javascript变量:全局?还是局部?这个得注意

      在JS中,是没有块级作用域的

      举两个个例子:

      if语句块:    

if (true){
	var name='Ling';
}
alert(name);

输出:Ling

      for语句块;  

for(var i=0;i<10;i++) {
	var name='Ling';
}
alert(i);
alert(name);

输出:10

输出:Ling

也就是说最后的结果都是window下全局变量:

<span style="font-family:KaiTi_GB2312;">alert(window.i);
alert(window.name);</span>

      在Javascript的函数体中,有下面几种情况需要注意:

      1、有无Var

        如果有Var,在函数内部声明变量是局部变量,如下例,读取不到name的数据。

<span style="font-family:KaiTi_GB2312;">function box(){
	var name ='Ling';
}
alert(name);</span>

        如果把var去掉的话,那么就会输出:Ling,此时声明的变量为全局变量。在写代码的过程中,不适用var就初始变量的话,会有很多意外发生,所以初始变量的时候一定要加上var。

     

       2、全局变量和局部变量命名相同    

<span style="font-family:KaiTi_GB2312;">var scope="global";
function t(){
    alert(scope);
    var scope="local"
    alert(scope);
} </span>

    最终的输出结果是:

               undefined

               local

 

   为什么会出现这样的结果?因为:

   javascript 变量范围

(1)全局变量的作用域是全局性的,即在整个Javascript程序中,全局变量作用处处都存在。定义在”script”块中,在”function”函数外。
(2)局部变量的作用域是局部性的,在函数内部或函数参数时定义,作用范围是从函数开始到结尾(注意此处说法)
(3)在函数内部,局部变量的优先级比同名的全局变量优先级要高;如果存在与全局变量名称相同的局部变量(包括参数),那么该全局变量将不再起作用。

    

  原来是这个原因。不知道你看明白了没有~~

  

  那么当全局变量和局部变量重名时,怎么解决这个问题呢?

  

  哈哈~~最简单的当然就是避免全局变量和局部变量相遇咯~~

  

  还有另外一种方法,window对象的所有属性拥有全局作用域,用window.全局变量名,如下:

 

<span style="font-family:KaiTi_GB2312;">var scope="global";
function t(){
    alert(window.scope);
    var scope="local"
    alert(scope);
}  </span>

至此,问题也就说完了。

 
总结

上面的问题其实也反映的另一个问题,命名规范的问题,如果命名不规范,就会出现很多意想不到的问题,所以,花点时间上网查查几种不同的命名的规范,这样能在你编写代码的时候减少不必要的麻烦。

     

      

    

       

       

时间: 2024-08-31 07:17:55

javascript变量:全局?还是局部?这个得注意的相关文章

JavaScript变量(局部/全局)的详解

局部 JavaScript 变量 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域是局部的). 您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量. 这么一个贴子说明了"有var"和"无var"的差别:  代码如下 复制代码 // These are both globals var foo = 1; bar = 2;   function test() {    

JAVASCRIPT变量之局部/全局变量

局部 JavaScript 变量 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域是局部的). 您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量. 只要函数运行完毕,本地变量就会被删除. 全局 JavaScript 变量 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它. JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在

JavaScript变量的作用域全解析_基础知识

变量作用域是程序中定义这个变量的区域. 先来看一段示例: /*  代码1  */ var scope = "global "; function checkScope() { var scope = "local "; function childCheck() { var scope = "childLocal "; document.write(scope); } function childUndefined() { document.wr

理解JavaScript变量作用域更轻松_javascript技巧

JavaScript本身作为一门简单的语言,就其变量作用域问题一样令不少人头晕,这主要是因为JavaScript闭包的存在.本文不打算深入讲解JavaScript变量作用域问题(其实本人也没有能力能把这一话题讲的深入些),也不讲"闭包"话题,本文只讨论最实用的JavaScript作用域知识点. 一.JavaScript作用域分类 JavaScript就两种作用域:全局(window).函数级(function).函数级(function)不要理解为"块级(大括号{}级)&qu

JavaScript 变量 作用域 内存

知识点 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. 一.变量及作用域 1.基本类型和引用类型的值 变量可能包含两种不同的数据类型的值:基本类型值和引用类型值.基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置.而引用

JavaScript 变量、作用域及内存_javascript技巧

JS变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已; 由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变; 一 变量及作用域1.基本类型和引用类型 // JS变量包含两种不同的数据类型的值:基本类型值和引用类型值; // 1.基本类型值:保存在栈内存中的简单数据段;即这种值完全保存在内存中的一个位置; // 基本类型值包含:Undefined|Null|Boolean|Number|String; // 这些

javascript变量作用域

javascript变量作用域只有两种情况:全局作用域.函数作用域 没有代码块作用域,因而要养成一处声明全部变量的编程习惯(文件头部.函数头部). function test(){ var abc="123"; efg="456"; put("in test abc="+abc); put("in test efg="+efg); } function test1(){ var abc; put("in test1

Javascript变量作用域详解

         这篇文章主要是对Javascript变量作用域进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 变量的作用域指的是变量的可见性,而生命周期则(存活期)则是从另一个角度考察变量.         JS中变量的作用域分为全局变量和局部变量,函数内定义的称为局部变量,函数外的称为全局变量.("函数外的称为全局变量"是相对的,另此处讨论的前提是用var显式声明的变量,函数内不用var定义的变量默认是全局变量,当然忽略var声明变量是不赞成的).    代码如

javascript变量声明实例分析

  javascript变量声明实例分析          这篇文章主要介绍了javascript变量声明,实例分析了javascript变量声明的相关使用技巧,需要的朋友可以参考下 本文实例讲述了javascript变量声明的方法.分享给大家供大家参考.具体分析如下: js中使用一个变量之前应当先声明.变量使用关键字var来声明. 如果未在var声明语句中给变量指定初始值,则该变量值为undefined. 不用在声明变量时指定变量类型,js变量可以是任意数据类型. 使用var语句重复声明变量是

JavaScript变量的声明学习笔记

变量的声明 JavaScript 使用关键字 var 来声明变量,可以先声明后赋值,也可以在声明的同时赋值,多个变量同时声明使用逗号(,)分隔.例如:  代码如下 复制代码 // 先声明,后赋值 var sex; sex="男"; // 声明的同时进行赋值 var age=22; var name="张三"; // 同时声明多个变量 var x=1,y=2,z=3;  // 声明多个变量时用逗号( ,)分开其中,sex.age.name ... 称为 变量名,&qu