JS的全局变量与局部变量及变量的提升
遇到全局变量与局部变量的时候总是出一些或多或少的问题,于是专门花时间去认真研究了一下全局变量与局部变量。
这是在网上看到的一个关于全局变量与局部变量的代码,看了下作者的解析,自己也进行了研究。
<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的全局变量与局部变量及变量的提升的更多相关文章
- js中全局变量和局部变量以及变量声明提升
javascript中全局变量和局部变量的区别 转载前端小99 发布于2018-04-23 15:31:35 阅读数 2102 收藏 展开 [javascript] view plain copy ...
- PHP和JS中全局变量和局部变量
一,PHP中全局变量和局部变量 php与C++中对全局变量和局部变量定义类似,全局变量:函数外定义的变量,在全局通用:局部变量:在函数内定义的变量,只在函数内有效.PHP中变量范围跨越了include ...
- Javascript:谈谈JS的全局变量跟局部变量
原文链接:http://blog.csdn.net/zyz511919766/article/details/7276089# 今天公司一个实习小妹子问我两段JS代码的区别: <script t ...
- c语言全局变量与局部变量(当变量重名时)的使用情况
在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等.不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的.这样的做法 ...
- JS关于全局变量跟局部变量的总结
一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可 ...
- JS高级. 05 词法作用域、变量名提升、作用域链、闭包
作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...
- 今天才知道原来我还没弄清楚js中全局变量和局部变量的定义...
查资料看到这段还不错,来源:原文:https://blog.csdn.net/czh500/article/details/80429133 粘过来记录一下... 1.使用var声明变量,在方法内部是 ...
- JavaScript 声明全局变量与局部变量
一.JavaScript 声明全局变量的三种方式: 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量.该方式即 ...
- JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用
“JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...
随机推荐
- Maven的基本概念
一.Maven的基本概念' Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1 ...
- Linux 设置系统时间和时区1.Centos
- EvansClassification
EvansClassification In his excellent book Domain Driven Design, Eric Evans creates a classification ...
- Java对象、引用、实例
https://blog.csdn.net/zmx729618/article/details/54093075
- 启动一个SpringBoot的maven项目
最近拿到了一个maven项目,原先是使用.net开发的,虽然Java和C#的语法相近,但是难免还有一些差别,包括语言特性,IDE的使用方面,都需要一段时间的习惯和适应. 该项目总体上是前后端分 ...
- 【HNOI 2016】大数
Problem Description 小 B 有一个很大的数 \(S\),长度达到了 \(N\) 位:这个数可以看成是一个串,它可能有前导 \(0\),例如 00009312345 .小 B 还有一 ...
- Spring的基础注解
Spring的基础注解 1.注解的概述 注解是为了便于程序的调试而用于代替配置文件的一种程序语法,与配置文件具有互换性.通常基于注解编程的程序更加简洁. (注:使用Spring注解必须导入aop包) ...
- P3953 逛公园
传送门 花了一个下午才 A 的毒瘤题 思路: 这题需要建两个图,一个正向图,一个反向图. 先在正向图上跑一遍 dijkstar ,计算出每个点到 点1 的最短路径 . 然后在反向图上开始记忆化搜索: ...
- Python 开发 项目《外星人入侵》
2019-02-05 本篇心路历程: 本篇是打算记录自己的第一个python项目,也是众人皆知的<外星人入侵项目>,本项目大概500多行.趁着寒假,大概耗时3天吧,把完整代码敲了出来,当然 ...
- chat聊天系统项目
项目名称:实现一个在线聊天系统? 一.需求 1. 海量用户在线聊天系统:2. 用户登录注册:3. 根据用户ID或者Nickname搜索并添加用户:4. 动态知道好友上下线:5. 可以创建群并添加好友到 ...