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 在网页中的运用(asp.net)
Nov 23 Javascript
XENON基于JSON变种
Jul 27 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
js闭包的用途详解
Nov 09 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
JavaScript中字符串拼接的基本方法
Jul 07 Javascript
javascript实现动态标签云
Oct 16 Javascript
javascript图片延迟加载实现方法及思路
Dec 31 Javascript
第一次接触神奇的Bootstrap
Oct 14 Javascript
BootStrap modal模态弹窗使用小结
Oct 26 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
Apr 16 Javascript
微信小程序实战之自定义模态弹窗(8)
Apr 18 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
基于laravel制作APP接口(API)
2016/03/15 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
php-app开发接口加密详解
2018/04/18 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
跟老齐学Python之网站的结构
2014/10/24 Python
深入理解Python中的元类(metaclass)
2015/02/14 Python
python生成器表达式和列表解析
2016/03/10 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python IDLE入门简介
2017/12/08 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
机电专业大学生求职信
2013/10/04 职场文书
优秀教师先进材料
2014/12/16 职场文书
初一英语教学反思
2016/02/15 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS