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 constructor和instanceof,JSOO中的一对欢喜冤家
May 25 Javascript
flash 得到自身url参数的代码
Nov 15 Javascript
分享20款好玩的jQuery游戏
Apr 17 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
Jquery异步提交表单代码分享
Mar 26 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
prototype与__proto__区别详细介绍
Jan 09 Javascript
微信小程序分页加载的实例代码
Jul 11 Javascript
import与export在node.js中的使用详解
Sep 28 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
在Chrome DevTools中调试JavaScript的实现
Apr 07 Javascript
jQuery带控制按钮轮播图插件
Jul 31 jQuery
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统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
手机端转换rem适应
2017/04/01 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
js编写简易的计算器
2020/07/29 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
python获取标准北京时间的方法
2015/03/24 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python 经典数字滤波实例
2019/12/16 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python