遇到全局变量与局部变量的时候总是出一些或多或少的问题,于是专门花时间去认真研究了一下全局变量与局部变量。

这是在网上看到的一个关于全局变量与局部变量的代码,看了下作者的解析,自己也进行了研究。

 <script>
var a =1;
function test(){
alert(a);
var a = 2;
alert(a);
}
test();
alert(a);
</script>

第一反应的输出结果应该是1  2  1,其实结果不对(正确的运行结果 undefined 2 1),真实的代码执行顺序应为

<script>
var a =1;
function test(){
var = a;
alert(a);
a = 2;
alert(a);
}
test();
alert(a);
</script>

根据预编译:

1、只有关键字函数会进行声明提前 字面量函数不会被提前的
2、所以变量会提升执行代码的最顶部,变量的值只会在原地等赋值给变量(赋值语句不会被提升)
3、如果全局变量和局部变量是一个变量名的话 在函数内部优先考虑就近原则;

  简单的说就是var的提升

  如var a = 1;

  把var定义的变量提升到script的最上方    var = a;(此处定义在function内部所以为局部变量)

  赋值语句不会被提升(哪怕=后面是一个function)   a = 1;

  所以就导致了a先被定义而没赋值所以输出第一个为undefined

  到第二个输出的时候此时 a = 2; a已经被赋值为2了,所以输出第二个为2

  第三个输出时 此时已经跳出了function ,输出的a,计算机就找到了一开始定义的全局变量  var a =1; ,所以输出第三个为1

Javascript的变量的scope是根据方法块来划分的  其中 只有function会对局部变量与全局变量产生影响

也就是说,在function中定义的变量不能跳出function的{ }

而在while、for、if中定义并使用的变量是可以跳出{ }的

 <script type="text/javascript">

     function test(){
var a = 1;
}
alert(a); //报错:a is not defined,因为a是没有跳出function for(var i=1;i<=3;i++){
alert(i); //依次显示 1 2 3
}
alert(i); //显示 4 很明显此时i跳出了for的{ } </script>

JS的全局变量与局部变量及变量的提升的更多相关文章

  1. js中全局变量和局部变量以及变量声明提升

    javascript中全局变量和局部变量的区别 转载前端小99 发布于2018-04-23 15:31:35 阅读数 2102  收藏 展开 [javascript] view plain copy ...

  2. PHP和JS中全局变量和局部变量

    一,PHP中全局变量和局部变量 php与C++中对全局变量和局部变量定义类似,全局变量:函数外定义的变量,在全局通用:局部变量:在函数内定义的变量,只在函数内有效.PHP中变量范围跨越了include ...

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

    原文链接:http://blog.csdn.net/zyz511919766/article/details/7276089# 今天公司一个实习小妹子问我两段JS代码的区别: <script t ...

  4. c语言全局变量与局部变量(当变量重名时)的使用情况

    在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等.不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的.这样的做法 ...

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

    一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可 ...

  6. JS高级. 05 词法作用域、变量名提升、作用域链、闭包

    作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...

  7. 今天才知道原来我还没弄清楚js中全局变量和局部变量的定义...

    查资料看到这段还不错,来源:原文:https://blog.csdn.net/czh500/article/details/80429133 粘过来记录一下... 1.使用var声明变量,在方法内部是 ...

  8. JavaScript 声明全局变量与局部变量

    一.JavaScript 声明全局变量的三种方式: 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量.该方式即 ...

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

    “JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...

随机推荐

  1. java窗体

    听完老师所讲的窗体,然后自己就去尝试写代码,结果是窗体出现了,但是就是不能关闭,求解!! package Swing.src.swring; import java.awt.Color;import ...

  2. 完整的多文件上传实例(java版)

    昨天刚刚做了一个文件列表上传,后端很简单,用 MultipartFile[] files 获取文件流数组,后端就当IO流操作就可以,似乎好像没啥好写的,但是!!!!!前端是真的糙单.要是自己写一个前端 ...

  3. 中间件详解,Django复习

    day74 2018-05-21 课程安排周一: 中间件 auth模块+分析BBS项目需求(小组讨论把表结构设计出来) 1. 今日内容 中间件:http://www.cnblogs.com/liwen ...

  4. 关于js中的类式继承

    ; }; ,,]; }; ); ; }; //子类 function Bb(){ }; var F=new f(); F.prototype=Aa.prototype;//此处只能传递方法,没有办法传 ...

  5. vue filters中使用data中数据

    vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...

  6. mui上拉加载会影响页面中的某些点击事件

    项目是vue写的(移动端) <div class="mui-scroll"> <a :href="bannerinfo.activity_url&quo ...

  7. Vivado 设计套件

    疑惑 有一天我在上网,逛着逛着看到一个叫https://pan.baidu.com/s/16Nu03YJLuz_aYuGQMm_8oQ的链接,那个网页的标题好像叫"Vivado 2017.4 ...

  8. loj #6.Guess Number

    原题链接:https://loj.ac/problem/6 Guess Number 内存限制:256 MiB 时间限制:1000 ms 题目类型:交互 题目描述 这是一个交互题的模板. 系统会随机生 ...

  9. Unity外包 UE4外包 项目案例平台开通通知

    长年承接Unity外包 UE4外包,大家好,本公司团队已将案例上传至专门的案例官网. 欢迎联系我们索取,谢谢! 有项目外包请联系QQ:372900288 索取案例.

  10. js打印html指定元素,解决动态获取的图片无法打印问题

    用js来调用浏览器的打印接口很容易,一两行代码就能搞定,但是有些数据是通过动态生成的,例如一些动态生成的二维码,有时候调用打印接口图片会无法显示 为了解决这个问题,建议使用下面这个库 下载:https ...