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 相关文章推荐
js图片自动轮播代码分享(js图片轮播)
May 06 Javascript
js代码实现随机颜色的小方块
Jul 30 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
全面了解JS中的匿名函数
Jun 29 Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
JavaScript将数组转换为链表的方法
Feb 16 Javascript
jquery实现的放大镜效果示例
Feb 24 jQuery
JavaScript如何实现图片处理与合成
May 29 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
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
javascript new 需不需要继续使用
2009/07/02 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
用Python制作简单的钢琴程序的教程
2015/04/01 Python
python 内置函数filter
2017/06/01 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
django迁移文件migrations的实现
2020/03/31 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
介绍一下OSI七层模型
2012/07/03 面试题
生产车间主任的个人自我鉴定
2013/10/25 职场文书
教师远程培训感言
2014/03/06 职场文书
秋天的雨教学反思
2014/04/27 职场文书
核心价值观演讲稿
2014/05/13 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
商场收银员岗位职责
2015/04/07 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫
MySQL 字符集 character
2022/05/04 MySQL