Javascript之全局变量和局部变量部分讲解

  以此文作为自己学习的一个总结。

关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量。

一、局部变量和全局变量重名会覆盖全局变量

1 var a = 1;
2 function test1() {
3   var a = 2;
4   alert(a);
5 }
6 test1();// 2  

这里的函数中的定义的a是局部变量,它的作用域为函数{}之间,函数外定义的a为全局变量,它的作用域为整个程序(描述有点不准确)。在函数中的局部变量和全局变量重名,局部变量会覆盖全局变量。

二、提到全局变量与局部变量不得不说明的一个知识点就是变量提升(这是一个坑)。‘与C/C++逐行执行代码不同,JS引擎的工作方式是,先获取所有被声明的变量再逐一执行,所有变量的声明语句都会被提升到当前代码块的头部’。注:代码块指的是function的一个{},通常的if、while、for的{}中变量不会提升。

了解了变量提升了之后我们用以下代码来演示:

1 var a = 1;
2 function test1() {
3     alert(a);
4     var a = 2;
5     alert(a);
6 }
7 test1();
8 alert(a);//undefined  2  1

为什么结果不是1  2  1呢?原因就在于代码提升。由于代码提升的效果所以实际执行的代码是这样的:

1 var a = 1;
2 function test1() {
3    var a;//局部变量与全局变量重名时会覆盖全局变量,此时的a只有声明却未定义
4     alert(a);//所以执行alert值为undefined
5     a = 2;
6     alert(a);
7 }
8 test1();
9 alert(a);//undefined  2  

时间: 2024-12-20 23:48:45

Javascript之全局变量和局部变量部分讲解的相关文章

JavaScript中全局变量和局部变量的不同

今天看到大神写得一片文章,自己对全局变量和局部变量的理解还是不够深刻,因此写到这篇文章,做个总结. 大神代码截图+理解文字如下: 解析:上面代码中,变量i是var命令声明的,在全局范围内都有效,所以全局只有一个变量i.每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),里面的i指向的就是全局的i.也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是10. 一.定义 局部变量:变量在函数内声明,只能在函数内

JavaScript 声明全局变量和局部变量

JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量.该方式即为显式声明详细如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 <script>   var test = 5;//全局变量   function a(){     var a = 3;//局部变量     alert(a);   }   function b(){   

JavaSCript全局变量与局部变量

今天公司一个实习小妹子问我两段js代码的区别: [javascript] view plain copy <script type="text/javascript"> var a = "Hello"; function test(){ var a; alert(a); a = "World"; alert(a); } </script> [javascript] view plain copy <script ty

Javascript:谈谈JS的全局变量跟局部变量

原文链接:http://blog.csdn.net/zyz511919766/article/details/7276089# 今天公司一个实习小妹子问我两段JS代码的区别: [javascript] view plain copy <script type="text/javascript"> var a = "Hello"; function test(){ var a; alert(a); a = "World"; alert(

Javascript:谈谈JS的全局变量跟局部变量【转】

两段JS代码的区别:   <script type="text/javascript"> var a = "Hello"; function test(){ var a; alert(a); a = "World"; alert(a); } </script> <script type="text/javascript"> var a = "Hello"; functio

JS关于全局变量跟局部变量的总结

一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可以看看以下几个例子: 1 <script> 2 function test2(){ 3 alert ("before for scope:"+i); // i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行) 4 5 // 此时i的值是underfine

JS的全局变量跟局部变量

一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可以看看以下几个例子: <script> function test2(){ alert ("before for scope:"+i); // i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行) // 此时i的值是underfined for(var

JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

“JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能. 1.函数的功能 代码重复性使用 模块化编程 2.语法: 使用函数前要先定义才能使用 函数定义有三个部分:函数名,参数列表,函数体 格式: 1 function 函数名([参数1, 参数2, ...]){ 2 3 函数执行部分; 4 5 return 表达式; 6 7

谈谈JS的全局变量跟局部变量

今天公司一个实习小妹子问我两段JS代码的区别: [javascript] view plaincopy <script type="text/javascript"> var a = "Hello"; function test(){ var a; alert(a); a = "World"; alert(a); } </script> [javascript] view plaincopy <script type