- 浏览: 1325495 次
- 性别:
- 来自: 湖南澧縣
文章分类
最新评论
-
虾米小尹:
不行啊!2.2-0.25=1.9500000000000002 ...
JavaScript浮点数运算 —— 精度问题 -
heluping000000:
引用String a= "abc",首先在 ...
String,到底创建了多少个对象? -
mack:
谢谢分享matcher.appendReplacement(s ...
string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement -
wzt3309:
完全理解,比网上其他资料都要详细
String,到底创建了多少个对象? -
u014771876:
Java中十六进制转换 Integer.toHexString()
-
前言
JavaScript也许对我们搞WEB企业开发人员来说是很熟悉了,但又有几个人真真的学习过他、了解过它呢,可能因为以下种种原因吧,一是可能是太简单了,平时只用它来写点表单的验证,充其量用它来操纵BOM(BOM是什么,请看《JavaScript实现》 )而已;二是可能是我们用得不是很深(一点表单校验吧),也可能是没有太多的时间再去学它(比如我?或许是借口吧?),也可能是...
以前一直没有真真的去学过它,但也曾想过认真的学习一遍,毕竟很常用吧。说到这里,我感到很羞愧,做为一个几年WEB开的人员,还一直认为JScript就是我们平时讲到的JavaScript呢(不知道的请看《JavaScript的历史》 )!也直到前不久看到《悟透JavaScript》 一贴(后面等有空时转载过来认真真的看它一遍),才恍然大悟,JavaScript原来这么大的艺术魅力... 所以现决定从头看一下,好好的熟悉熟悉一下,再说随着互连网的飞速发展,WEB技术中肯定缺少不了它,从N年前到现在还在流行的Ajax就可能出它的魅力了。
好了,还是开始学习点吧,不然老了就学不了,毕竟人的精力与生命是有限的。这里我会把学习过程中较易容出错又较重要的都记录下来并贴于此,供N年后快速查阅。先准备参考《W3Shool手册》,然后是《JavaScript权威指南》,最后就是《JavaScript高级程序设计》。
这里还是从ECMAScript学起吧,毕竟他才是规范,学嘛,当然要学标准的。
-
ECMAScript 变量
变量定义
ECMAScript 中的变量是用 var 运算符(variable 的缩写)加变量名定义的。
var test = "hi";
ECMAScript 是弱类型的,所以解释程序会为 test 自动创建一个字符串值,无需明确的类型声明。
用同一个 var 语句定义的变量不必具有相同的类型,如下所示:
var test = "hi", age = 25;
ECMAScript 中的变量并不一定要初始化。
变量可以存放不同类型的值 。例如,可以把变量初始化为 字符串类型的值,之后把它设置为数字值,如下所示:
var test = "hi";
alert(test);
test = 55;
alert(test);
命名变量
变量名需要遵守两条简单的规则:
第一个字符必须是字母、下划线(_)或美元符号($)
余下的字符可以是下划线、美元符号或任何字母或数字字符
变量声明不是必须的
var sTest = "hello ";
sTest2 = sTest + "world";//此变量未声明
alert(sTest2);
ECMAScript 的解释程序遇到未声明过的标识符时,用该变量名创建一个全局变量,并将其初始化为指定的值。
变量作用域
ECMAScript中只存在一种作用域——公用作用域
。ECMAScript中的所有对象的所有属性和方法都是公用的。
严格说来,ECMAScript并没有静态作用域
。不过,它可以给构造函数提供属性和方法。构造函数只是函数。函数是对象,对象可以有属性和方法
。例如:
function sayHi(){
alert('hi');
}
sayHi.alternate = function(){
alert('hola');
}
sayHi();//hi
sayHi.alternate();//bola
这里,方法alternate()实际上是函数sayHi的方法。可以像调用常规函数一样调用sayHi()输出"hi",也可以调用 sayHi.alternate()输出"hola"。即使如此,alternate()也是sayHi()公用作用域中的方法,而不是静态方法。
JavaScript变量作用域特点:
- JavaScript的变量作用域是基于其特有的作用域链的。
- JavaScript没有块级作用域(只有函数级作用域)。
- 函数中声明的变量在整个函数中都是有效的。
1、变量作用域是基于其特有的作用域链的
<script type="text/javascript" language="javascript"> var rain = 1; function rainman(){ var man = 2; //注:函数内定义的变量只能在该函数内使用,不能在函数外调用, //所以变量的作用域是函数级的 function inner(){ var innerVar = 4; alert(rain); } inner(); } rainman(); </script>
观察alert(rain);这句代码。JavaScript首先在inner函数中查找是否定义了变量rain,如果定义了则使用inner函数中的rain变量;如果inner函数中没有定义rain变量,JavaScript则会继续在rainman函数中查找是否定义了rain变量,在这段代码中rainman函数体内没有定义rain变量,则JavaScript引擎会继续向上(全局对象)查找是否定义了rain;在全局对象中我们定义了rain = 1,因此最终结果会弹出'1'。
作用域链:JavaScript需要查询一个变量x时,首先会查找作用域链的第一个对象,如果以第一个对象没有定义x变量,JavaScript会继续查找有没有定义x变量,如果第二个对象没有定义则会继续查找,以此类推。
上面的代码涉及到了三个作用域链对象,依次是:inner、rainman、window。
2、函数体内部,局部变量的优先级比同名的全局变量高
<script type="text/javascript" language="javascript"> var rain = 1; //定义全局变量 rain function check(){ var rain = 100; //定义局部变量rain alert( rain ); //这里会弹出 100 } check(); alert( rain ); //这里会弹出1 </script>
3、JavaScript没有块级作用域
<script type="text/javascript" language="javascript"> function rainman(){ /** * rainman函数体内存在三个局部变量 i j k,它们的作用域是相同的,且在整个rain函数体内都是全局的。 */ var i = 0; if( 1 ){ var j = 0; for( var k = 0 ; k < 3 ; k++ ){ alert( k ); //分别弹出 0 1 2 } alert( k ); //弹出3 } alert( j ); //弹出0 } </script>
4、内层函数声明的变量会隐藏掉外层函数相同变量的声明
<script type="text/javascript" language="javascript"> function outer(){ var x = 1; function rain(){ alert( x ); //弹出 'undefined',而不是1 var x = 'rain-man'; //隐藏函数外层相同变量的声明 alert( x ); //弹出 'rain-man' } rain(); alert(x); //弹出 '1' 只会在rain方法里隐藏变量的声明,在函数外还是用外层声明的变量 } outer(); </script>
这是由于在函数rain内局部变量x在整个函数体内都有定义( var x= 'rain-man',进行了声明),所以在整个rain函数体内隐藏了同名的全局变量x。这里之所以会弹出'undefined'是因为,第一个执行alert(x)时,局部变量x仍未被初始化。
5、未使用var关键字定义的变量都是全局变量
<script type="text/javascript" language="javascript"> function rain(){ x = 100; //声明了全局变量x并进行赋值 } //alert(x); //运行会出错,在调用rain方法之前,x未声明,因为 //未声明的任何变量除了可以typeof操作外的任何操作都是不允许的 rain(); alert( x ); //会弹出100 </script>
这也是JavaScript新手常见的错误,无意之中留下的许多全局变量。
6、全局变量都是window对象的属性
<script type="text/javascript" language="javascript"> var x = 100 ; alert( window.x ); //弹出100 alert('x' in window); //进一步证明全局变量为window的属性 </script>
等同于下面的代码
<script type="text/javascript" language="javascript"> window.x = 100; alert( window.x ); alert(x); </script>
原帖地址:http://www.cnblogs.com/rainman/archive/2009/04/28/1445687.html
发表评论
-
HTML、JS、JSON特殊字符
2010-12-13 23:47 25813JS到HTML特殊字符转换 这几天做项目,发现从服务器端以J ... -
HTML — HTTP URL 中的特殊字符
2009-10-31 18:16 32381. + URL中的+号表示空格 ... -
HTML — CSS选择器
2009-10-25 21:11 2121一个样式规则由两部分组成:选择器和样式声明。选择器表明要为哪一 ... -
部分解决JsUnit无法在firefox3、safari 测试的问题
2009-10-25 07:03 1406在上一篇中出现了一个问题,就是用 jsunit2.2alpha ... -
JsUnit——eclipse插件(四)
2009-10-25 06:59 2403这节我们来看看如何通过JsUnit插件来运行前几节所测试过的测 ... -
10、JavaScript跨浏览器需注意的问题——ajax基础笔记
2009-10-21 22:19 1323向表中追加行 创建表格行时,我们要把创建的 tr 追加到 t ... -
JsUnit详解——Web服务方式(三)
2009-10-21 00:21 2396上两节提到过以Web方式来运行JsUnit,不过不是很详细,这 ... -
JsUnit详解——《ajax基础》笔记(二)
2009-10-20 22:38 2487使用标准/定制查询串 如此说来,测试运行工具是很强大的,但是 ... -
JsUnit详解——《ajax基础》笔记(一)
2009-10-20 19:57 2539JsUnit与JUnit对比 JsUnit也有setUp() ... -
使用Firefox的Web开发插件
2009-10-18 17:53 1437Firefox的Web开发插件为Firefox浏览器增加了大量 ... -
9、访问WEB服务(REST)——ajax基础笔记
2009-10-18 17:24 3974最其名的WEB服务实现是S ... -
8、读取响应头部——ajax基础笔记
2009-10-18 17:20 6715你有时可能需要从服务器获取一些内容,例如,可能想“ping”一 ... -
7、使用JSON向服务器发送数据——ajax基础笔记
2009-10-18 17:20 5145看过前面的例子后(使用XML向服务器发送复杂的数据结构),你可 ... -
6、请求参数作为XML发送——ajax基础笔记
2009-10-18 17:20 1725如果只是使用一个包含 名/值 对的简单查询串,这可能不够健壮, ... -
4、将使用W3C DOM动态生成页面——ajax基础笔记
2009-10-18 17:19 1367使用W3C DOM动态生成页面 dynamicContent ... -
3、将响应解析为XML——ajax基础笔记
2009-10-18 17:18 1019将响应解析为XML parseXML.xml清单: < ... -
2、使用innerHTML属性创建动态内容——ajax基础笔记
2009-10-18 17:17 1872使用innerHTML属性创建动态内容 如果结合作用HTML ... -
1、使用XMLHttpRequest对象——ajax基础笔记
2009-10-18 17:17 1981XMLHttpRequest最早是在 IE5 中以active ... -
30、JavaScript代码优化
2009-10-16 21:25 1526JavaScript代码的速度被分成两部分:下载时间和执行速度 ... -
JavaScript代码优化(二)
2009-10-16 01:32 1158◆字符串的使用 在IE6和IE7中因字符串级联导致的主要问题 ...
相关推荐
// 局部变量:在函数作用域之间里的一个或者多个函数或者作用域,在局部作用域中定义的变量 局部变量。只有在该作用域内可以访问 // 局部作用域:任何一个函数的内部都有一个局部作用域,在局部作用域中定义的...
大家都知道一个变量的作用域(scope)是程序中定义这个变量的区域。全局(global)变量的作用域是全局性的,在javascript中,它的存在都有定义。而在函数之内声明的变量,就只在函数体内部有定义。它们是局部(local)变量...
* PHP函数 -----变量的作用域 课程内容 局部变量 全局变量 静态变量 变量的作用域 变量需要先定义后使用,但这并不意味着变量定义后就可以随便使用,只有在它的作用范围中才可以被使用,这个作用范围称为变量的作用...
变量的作用域 目录 课程导入 理解变量作用域的概念 理解局部变量与全局变量的区别及作用域 能区分局部变量与全局变量,并读懂程序 变量的作用域(scope of a variable) 就指变量在程序中可以被引用的范围。 变量的...
C语言入门经典中的例程,程序简单明了的介绍了变量的作用域,循环外定义变量和循环内定义变量的区别
PHP变量的定义及作用域
本文章是关于作用域的定义及应用。
1.简述变量按作用域的分类 变量按作用域分:分为全局变量和局部变量 全局变量:在所有函数外部定义的变量叫做全局变量 全局变量的使用范围:从定义位置开始到下面整个程序结束 局部变量:在一个函数内部定义的变量...
无论是以类为基础的面相对象编程,还是单纯函数内部变量的定义,变量的作用域始终是Python学习中一个必须理解掌握的环节,下面我们从局部变量和全局变量开始全面解析Python中变量的作用域,需要的朋友可以参考下
d = 10 # a定义在了函数内部,所以他的作用域就是函数内部,函数外部无法访问 print('函数内部:','c =',c) print('函数内部:','d =',d) fn() print('函数外部获取:','c =',c) print('函数外部获取:','d =',d...
# 题目:学习使用auto定义变量的用法。 # 程序分析:python中的变量作用域。
一、迷思!由一段代码引发的疑惑 请看如下代码: 代码如下: for... 如果JavaScript中用var声明的变量可视为局部变量,那么能访问到这个变量的作用域就是这个变量的局部作用域。如上例,在console.log行处,依然有j、k
再次去看了那篇文章之后我也做了下试验,得到结果:在VBScript中,函数中定义的变量的作用域是整个函数,而不是块级,不管这个变量是在函数中哪个位置定义的。因此,函数中一个变量不管在函数的哪个位置
1、作用域 通常来说,一段程序代码中所用到的名字并不是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。 2.2.4 ...
不同作用域对应的变量:全局变量、局部变量、块级变量(ES6提供的)。 函数作用域 全局作用域 块级作用域 1.作用域分类 全局变量和局部变量 JavaScript 认识函数作用域 全局变量:不在任何函数内声明的变量(显示...
说起变量第一个要说到的肯定就是作用域,正是因为不熟悉JS的作用域,往往就会把面向对象的作用域张冠李戴,毕竟有些东西总是习惯性的这样,但是并不是每次照搬都是可以的,那么下一个问题就来了,js到底是什么作用...
变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。 全局变量所有作用域都可读,局部变量只能在本函数可读 函数在读取变量时,优先读取函数本身自有的局部变量,再去读全局...
1、局部变量与全局变量定义: 在子程序(函数)中定义的变量称为:局部变量;在程序顶级(一开始)定义的变量称为:全局变量。 2、局部变量与全局变量作用域: 局部变量作用域:定义该变量的子程序;全局变量作用域...
作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明的变量,称为形式参数。 在所有函数外部声明的变量,称为全局变量。 我们...