在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. 蓝桥杯-算法训练--ALGO-6 安慰奶牛

    问题描述Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路,但 ...

  2. js input输入事件兼容性问题

    if(navigator.userAgent.indexOf('Android') > -1){ $("#sign").on("input", funct ...

  3. DOM Exception error

    INDEX_SIZE_ERR  code 1                              索引是负值,或者超过了索引值 DOMSTRING_SIZE_ERR  code 2       ...

  4. 【收藏】Web前端开发第三方插件大全

    收集整理了一些Web前端开发比较成熟的第三方插件,分享给大家. ******************************************************************** ...

  5. C#中结构体定义并转换字节数组

    最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换:由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一 ...

  6. Filezilla账号密码都正确,但是连不上

    显示的错误信息是:服务器发回了不可路由的地址.使用服务器地址代替. 之前一直用CuteFTP把ssm项目发送给客户服务器,最近学习大数据用Filezilla连通虚拟机,感觉Filezilla很直观.就 ...

  7. JS中encodeURI,escape,encodeURIComponent区别

    js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1 ...

  8. .NET自带缓存机制实例

    using System;using System.Web;using System.Web.Caching;using System.Collections.Generic;using System ...

  9. MyBatis《2》

    MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/   1.properties 属性 1.在MyBatis配置文件中引用属性文件     MyBatis允许在 ...

  10. C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模 ...