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 相关文章推荐
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
javascript + jquery实现定时修改文章标题
Mar 19 Javascript
jquery解决客户端跨域访问问题
Jan 06 Javascript
学习JavaScript设计模式之享元模式
Jan 18 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
Mar 01 Javascript
jQuery对象与DOM对象转换方法详解
May 10 Javascript
超全面的JavaScript开发规范(推荐)
Jan 21 Javascript
详解JS实现系统登录页的登录和验证
Apr 29 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 Javascript
微信小程序开发之转发分享功能
Oct 22 Javascript
Vue 3.0双向绑定原理的实现方法
Oct 23 Javascript
通过实例解析vuejs如何实现调试代码
Jul 16 Javascript
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
中英文字符串翻转函数
2008/12/09 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
php语法检查的方法总结
2019/01/21 PHP
比较搞笑的js陷阱题
2010/02/07 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
python实现socket端口重定向示例
2014/02/10 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
数据库笔试题
2013/05/09 面试题
化工专业推荐信范文
2013/11/28 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
毕业生自荐信格式
2014/03/07 职场文书
绿色学校实施方案
2014/03/31 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
先进典型发言材料
2014/12/30 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
理解python中装饰器的作用
2021/07/21 Python