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>
至此,问题也就说完了。
总结
上面的问题事实上也反映的还有一个问题,命名规范的问题,假设命名不规范,就会出现非常多意想不到的问题,所以,花点时间上网查查几种不同的命名的规范,这样能在你编写代码的时候降低不必要的麻烦。
javascript变量:全局?还是局部?这个得注意的更多相关文章
- [ python ] 全局和局部作用域变量的引用
全局与局部变量的引用 (a)locals(b)globals 这里还需要在补充2个关键字一起比较学习,关键字:(c)nonlocal(d)global locals 和 globals locals: ...
- js变量搜索(先局部,后全局;先解析,后赋值)
var a=10; (function(){ alert(a); })() 变量先搜索局部,没有局部变量,会搜索全局变量 var a=10; (function(){ var a=20; alert( ...
- JavaScript 变量作用域
一. 变量声明 变量用var关键字来声明,如下所示: 变量在未声明的情况下被初始化,会被添加到全局环境. JavaScript执行代码时,会创建一个上下文执行环境,全局环境是最外围的环境.每个函数在被 ...
- JavaScript - 变量,作用域,内存
JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...
- javascript 变量,作用域,内存管理小结
js的变量保存两种类型的数据——基本数据类型与引用类型.具有以下几点特征: 变量: 1)基本类型值在内存中占固定大小的空间,因此被保存在栈内存中; 2) 把保存基本类型值得变量赋给另一个变量,会创 ...
- 六天玩转javascript:javascript变量与表达式(1)
说明 本系列属于进阶系列,语常用语法等不在本系列介绍范围之内. 在我刚开始做一个程序员并开发项目的时候,我总是喜欢使用开发语言的各种特性,每次m$发布新版C#的时候我总是会把开发者预览版下好,亲自体验 ...
- 【转】javascript变量作用域、匿名函数及闭包
下面这段话为摘抄,看到网上大多数人使用的是变量在使用的时候声明而不是在顶端声明,也可能考虑到js查找变量影响性能的问题,哪里用就在哪里声明,也很好. 在Javascript中,我们在写函数的时候往往需 ...
- 2015第35周五JavaScript变量
java语言里有一句很经典的话:在java的世界里,一切皆是对象. Javascript虽然跟java没有半点毛关系,但是很多会使用javascript的朋友同样认为:在javascript的世界里, ...
- 第一百零六节,JavaScript变量作用域及内存
JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...
- JavaScript变量相关问题
本文重在探讨JavaScript变量包含的两种不同数据类型的值--基本类型值和引用类型值的区别.在此外稍微带过ECMAScript和JavaScript的关系. 题为JavaScript变量,但更具体 ...
随机推荐
- winform音频播放器(有声小说[凡人修仙传])
该程序采用多线程的技术及DataGridView单元格扩展的技术 1.获取下载列表 private void GetDownList() { //System.Web.HttpUtility.UrlD ...
- tcprstat
tcprstat http://www.percona.com/docs/wiki/tcprstat:start 监控网络流量情况,计算请求的响应时间(the delay between reques ...
- 网页如何展示PPT文档
最近再做一个新项目,其中有一个难点,就是如何在网页上展示PPT,我网上找到了几种方法,但是真正符合我目前这个项目的就只有这一种方法了, 使用PowerPoint to Flash将ppt文 ...
- Redis安装及使用笔记
windows下安装Redis 1.下载Redis的软件包 Redis on github; 2.将软件解压到服务器软件目录; 3.在命令行运行此命令: ./redis-server redis.wi ...
- mybatis逆向工程之配置
逆向工程1.什么是逆向工程mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml. ...
- Mac安装Elasticsearch时提示:No Java runtime present, requesting install.
没有安装java的童鞋可以先去安装一下,地址:https://www.java.com/zh_CN/ 安装之后还是提示如下错误: ➜ elasticsearch-2.4.3 bin/elasticse ...
- IT连创业系列:App产品上线后,运营怎么搞?(中)
等运营篇写完,计划是想写一个IOS系列,把IT连App里用到和遇到的坑都完整的和大伙分享. 不过写IOS系列前,还是要认真把这个运营篇写完,接下来好好码字!!! 上篇说到,我们计划去一次富士康门口,拉 ...
- Intellij IDEA热加载更新 IntelliJ IDEA热加载自动更新(Update classes and resources )
定义及分类 1.1 定义 在web开发环境下,所谓热部署,即在不重新部署webapp的情况下,实时将工程代码改动更新到web容器中(例如tomcat).其原理可以类比ajax的作用,即局部刷新工程资源 ...
- 三、Hadoop学习笔记————从MapReduce到Yarn
Yarn减轻了JobTracker的负担,对其进行了解耦
- MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...