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变量,但更具体 ...
随机推荐
- Android 开发笔记___DatePicker__日期选择器
虽然EditText提供了inputTtype="date",但用户往往不太喜欢自己输入时间. Android为这个提供了DatePicker,但有很多缺点,不是弹窗模式,而是直接 ...
- addEventListener 的事件函数的传递【转载】
addEventListener 参数如下: addEventListener(type, listener[, useCapture]); type,事件名称 listener,事件处理器 useC ...
- python 3 ---购物车练习
# -*- coding:utf-8 -*-#Author Chen #定义商品列表List_of_commodities = [ ('Iphone',6888), ('Mac Pro',12888) ...
- IntelliJ配置jenkins服务的Crumb Data
近期在做jenkins测试,IntelliJ并没有自动安装jenkins服务器,因此需要自己添加,但是如果不配置Crumb Data,jenkins的服务就不能使用. 首先在服务器中开启CSRF服务, ...
- JSP内容复习
JSP的3个编译指令,7个动作指令,9个内置对象 三个编译指令(通知servlet引擎的处理消息,只在JSP转换成Servlet时起作用) 1.编译指令 page page指令用户定义JSP页面中的全 ...
- 基础拾遗-----mongoDB操作
基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
- VMWare安装Centos 6.9
VMWare下Centos 6.9安装教程,记录如下 1.新建虚拟机 (1)点击文件-->新建虚拟机 (2)选择 自定义(高级)-->下一步 (3)选择Workstation 12.0-- ...
- 利用Angular实现多团队模块化SPA开发框架
0.前言 当一个公司有多个开发团队时,我们可能会遇到这样一些问题: 技术选项杂乱,大家各玩各 业务重复度高,各种通用api,登录注销,权限管理都需要重复实现(甚至一个团队都需要重复实现) 业务壁垒,业 ...
- 在SQL Server Express版本中没有代理功能如何自动备份数据库
因为是免费的且单个数据库可以支持到10GB,对于一般企业完全足够了,也就将就使用了,备份将分为两步: 1.创建备份脚本 2.创建系统的计划任务进行每天的备份 详细做法如下: 1.创建备份脚本 打开SS ...
- 微信小程序支付及退款流程详解
微信小程序的支付和退款流程 近期在做微信小程序时,涉及到了小程序的支付和退款流程,所以也大概的将这方面的东西看了一个遍,就在这篇博客里总结一下. 首先说明一下,微信小程序支付的主要逻辑集中在后端,前端 ...