在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变量:全局?还是局部?这个得注意的更多相关文章

  1. [ python ] 全局和局部作用域变量的引用

    全局与局部变量的引用 (a)locals(b)globals 这里还需要在补充2个关键字一起比较学习,关键字:(c)nonlocal(d)global locals 和 globals locals: ...

  2. js变量搜索(先局部,后全局;先解析,后赋值)

    var a=10; (function(){ alert(a); })() 变量先搜索局部,没有局部变量,会搜索全局变量 var a=10; (function(){ var a=20; alert( ...

  3. JavaScript 变量作用域

    一. 变量声明 变量用var关键字来声明,如下所示: 变量在未声明的情况下被初始化,会被添加到全局环境. JavaScript执行代码时,会创建一个上下文执行环境,全局环境是最外围的环境.每个函数在被 ...

  4. JavaScript - 变量,作用域,内存

    JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...

  5. javascript 变量,作用域,内存管理小结

    js的变量保存两种类型的数据——基本数据类型与引用类型.具有以下几点特征:   变量: 1)基本类型值在内存中占固定大小的空间,因此被保存在栈内存中; 2) 把保存基本类型值得变量赋给另一个变量,会创 ...

  6. 六天玩转javascript:javascript变量与表达式(1)

    说明 本系列属于进阶系列,语常用语法等不在本系列介绍范围之内. 在我刚开始做一个程序员并开发项目的时候,我总是喜欢使用开发语言的各种特性,每次m$发布新版C#的时候我总是会把开发者预览版下好,亲自体验 ...

  7. 【转】javascript变量作用域、匿名函数及闭包

    下面这段话为摘抄,看到网上大多数人使用的是变量在使用的时候声明而不是在顶端声明,也可能考虑到js查找变量影响性能的问题,哪里用就在哪里声明,也很好. 在Javascript中,我们在写函数的时候往往需 ...

  8. 2015第35周五JavaScript变量

    java语言里有一句很经典的话:在java的世界里,一切皆是对象. Javascript虽然跟java没有半点毛关系,但是很多会使用javascript的朋友同样认为:在javascript的世界里, ...

  9. 第一百零六节,JavaScript变量作用域及内存

    JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...

  10. JavaScript变量相关问题

    本文重在探讨JavaScript变量包含的两种不同数据类型的值--基本类型值和引用类型值的区别.在此外稍微带过ECMAScript和JavaScript的关系. 题为JavaScript变量,但更具体 ...

随机推荐

  1. 转 html5离线储存,application cache,manifest使用体验

    html5离线应用application cache 最近在APP里新增一个论坛模块,为了快速地完成,决定将整个论坛模块做成WEB APP,WEB APP最致命的就是用户体验问题,页面跳转和过多的请求 ...

  2. JS中有关数组Array的常用方法函数

    Array对象的方法主要有如下几种(我所知道的): concat()连接两个或多个数组,并返回结果,但是值得注意的是该方法并不改变数组本身,而仅仅返回一个数组连接的副本. push()在数组后面添加一 ...

  3. js 切换全屏

    公司有一个需求就是点击某一个按钮实现全屏切换功能,然后呢我就在网上扒了段代码.封装了一下.使用的小伙伴们可以看看哦! 切换全屏代码 <!DOCTYPE html> <html> ...

  4. 用C#操作IIS创建虚拟目录和网站

    #region CreateWebsite 添加网站 public string CreateWebSite(string serverID, string serverComment, string ...

  5. .Net中各种不同的对象创建方式的速度差异

    在.Net中,微软给我们提供了很多不同的创建对象实例的方法,它们的速度又各有不同,以下一一列举. 使用new关键字 这在.Net中是最常见,也是速度最快的方式:                     ...

  6. C# 读写文本文件乱码解决方案

    在使用C#对文本文件读取的时候,如果其中包含了中文,经常会出现乱码.一般解决是在StreamReader加一个编码,我使用的是Encoding.UTF8,一般情况下使用这个参数就可以.但是,在这次我使 ...

  7. 基础教程:视图中的ASP.NET Core 2.0 MVC依赖注入

    问题 如何在ASP.NET Core MVC Views中注入和使用服务. 解 更新 启动 类来为MVC添加服务和中间件. 添加一项服务 添加一个Controller,返回 ViewResult. 添 ...

  8. mac环境下支持PHP调试工具xdebug,不需要建项目server

    先让php支持xdebug 方式一: https://xdebug.org/download.php 下载相应的xdebug  可以到http://xdebug.org/wizard.php 把php ...

  9. [转载] 使用HTML5的十大原因

    转载自http://www.williamlong.info/archives/3024.html 你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因:它现在还没有被广泛的支持,在IE中不 ...

  10. linux环境

    vim命令 http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 安装YouCompleteMe 按照百度搜索的 ...