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 代码也可以变得优美的实现方法
Jun 22 Javascript
JS常见问题整理(持续更新)
Aug 06 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
Sep 26 Javascript
鼠标滑过出现预览的大图提示效果
Feb 26 Javascript
Jquery api 速查表分享
Jan 12 Javascript
javascript查询字符串参数的方法
Jan 28 Javascript
ashx文件获取$.ajax()方法发送的数据
May 26 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 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验证码代码
2012/02/27 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
详谈javascript异步编程
2016/02/21 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
用Python写一个自动木马程序
2019/09/17 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Django实现简单的分页功能
2021/02/22 Python
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
九年级科学教学反思
2014/01/29 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
银行委托书范本
2014/09/28 职场文书
安全生产月标语
2014/10/07 职场文书
雨花台导游词
2015/02/06 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
Golang获取List列表元素的四种方式
2022/04/20 Golang