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 相关文章推荐
学习从实践开始之jQuery插件开发 对话框插件开发
Apr 26 Javascript
javascript操作excel生成报表示例
May 08 Javascript
如何防止回车(enter)键提交表单
May 11 Javascript
javascript常用的方法整理
Aug 20 Javascript
javascript中类的定义方式详解(四种方式)
Dec 22 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
详解Vue.js分发之作用域槽
Jun 13 Javascript
AngularJS中scope的绑定策略实例分析
Oct 30 Javascript
详解组件库的webpack构建速度优化
Jun 18 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
JS操作JSON常用方法(10w阅读)
Dec 06 Javascript
如何封装Vue Element的table表格组件
Feb 06 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
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
万能的php分页类
2017/07/06 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
python动态网页批量爬取
2016/02/14 Python
python下载图片实现方法(超简单)
2017/07/21 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Python 求数组局部最大值的实例
2019/11/26 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
智能电子应届生求职信
2013/11/10 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
深入探讨opencv图像矫正算法实战
2021/05/21 Python
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技