Javascript学习笔记二 之 变量


Posted in Javascript onDecember 15, 2010

一.关于Javascript变量声明
在Javascript中,声明一个变量
var a=1;
也可以直接
a=1;
这两种表达是有区别的,
一个是当前作用域的局部变量,另一个则是当前作用域的全局变量;
 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 

var n=999; 
function f1(){ 
alert(n); 
} 
f1(); // 999

另一方面,在函数外部自然无法读取函数内的局部变量。
function f1(){ 
var n=999; 
} 
alert(n); // error

二.Javascript变量作用域链
var x='000 '; 
document.writeln(x); //得出'000 ' 
a(); 
function a(){ 
var x='aaa '; 
function b(){ 
document.writeln(x); //undefined 
var x='bbb '; 
document.writeln(x); //bbb 
} 
b(); 
document.writeln(x); //aaa 
} 
//结果是:000 undefined bbb aaa

原理:
 当变量使用时,先从函数块(权威指南中用调用对象来解释)中找,
 如果找不到,从上一级函数块找,直到找到,
 如果直到顶层代码(指var x='000 ';的位置)还没找到定义,代码会报未定义错误。
1.按顺序执行的顺序,输出x '000 '(这个没问题);
2.然后执行a()
3.在a()中执行b()
4.b()中需要输出x,该函数体内(作用域)有x定义,但是还未赋值,因此输出undefined;(重点!)
5.然后再输出x,x已赋值,因此输出bbb;
6.最后输出aaa;
了解了以上原理,我们来看下面的例子
var x = "global"; 
function f() { 
var x='f1'; 
function f2(){ 
x='f2' ;//这里我有些混淆,GLOBAL的X应该重新被赋值为'f2' 
alert(x); //返回"f2" 
alert(window.x); //返回"global" 
} 
f2(); 
alert(x) //返回"f2" 
} 
f(); 
alert(x); //返回"global",没有被重新赋值为:f2 
//结果分别弹出:f2 global f2 global

解释:
 首先执行f()中的f2(),
f2()为内部函数产生一个作用域,因此x=‘f2'修改的是f()中的x值,而非全局x.
alert(x);为‘f2',alert(window.x)为‘global'.
然后执行alert(x);这个x的作用域为全局,为‘global'
三.给新手的建议
1.减少全局变量(解决方案:把变量封装到对象中)
引用:
“把你踩在全局的那些乱七八糟的脚印都归于一人名下,能显著降低与其他应用、小工具或JS库冲突的可能性。”
? Douglas Crockford
var name = 'Jeffrey'; 
var lastName = 'Way'; 
function doSomething() {...} 
console.log(name); // Jeffrey -- or window.name

更好的写法
var DudeNameSpace = { 
name : 'Jeffrey', 
lastName : 'Way', 
doSomething : function() {...} 
} 
console.log(DudeNameSpace.name); // Jeffrey

注意看,我们是如何戏剧化地把“乱七八糟的脚印”都归到“DudeNameSpace”这对象之下的;
2.一长列变量声明?别写那么多var,用逗号吧
var someItem = 'some string'; 
var anotherItem = 'another string'; 
var oneMoreItem = 'one more string';

更好的写法
var someItem = 'some string', 
anotherItem = 'another string', 
oneMoreItem = 'one more string';

不言自明。我不知道这样做能否提升代码执行速度,但是确实让你的代码干净许多。
Javascript 相关文章推荐
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
javascript继承之为什么要继承
Nov 10 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
jquery重新播放css动画所遇问题解决
Aug 21 Javascript
浅析Js中的单引号与双引号问题
Nov 06 Javascript
js获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
Nov 23 Javascript
后台获取ZTREE选中节点的方法
Feb 12 Javascript
Centos6.8下Node.js安装教程
May 12 Javascript
Vue.js 事件修饰符的使用教程
Nov 01 Javascript
编写v-for循环的技巧汇总
Dec 01 Javascript
vue+element_ui上传文件,并传递额外参数操作
Dec 05 Vue.js
Javascript学习笔记一 之 数据类型
Dec 15 #Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 #Javascript
jQuery Ajax使用 全解析
Dec 15 #Javascript
JQuery 应用 JQuery.groupTable.js
Dec 15 #Javascript
javascript 冒泡排序 正序和倒序实现代码
Dec 14 #Javascript
javascript中的关于类型转换的性能优化
Dec 14 #Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 #Javascript
You might like
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php rsa加密解密使用详解
2015/01/14 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
再谈javascript原型继承
2014/11/10 Javascript
理解javascript回调函数
2014/12/28 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
学校三节实施方案
2014/06/09 职场文书
创文明城市标语
2014/06/16 职场文书
经典团队口号大全
2014/06/21 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android