易截截图软件、单文件、免安装、纯绿色、仅160KB

深入理解JavaScript的变量作用域

深入理解JavaScript的变量作用域
http://www.cnblogs.com/rainman/archive/2009/04/28/1445687.html
在学习JavaScript的变量作用域之前,我们应当明确几点:
a、JavaScript的变量作用域是基于其特有的作用域链的。
b、JavaScript没有块级作用域。
c、函数中声明的变量在整个函数中都有定义。
1、JavaScript的作用域链
首先看下下面这段代码:
Code
<script type="text/javascript" language="javascript">
var rain = 1;
function rainman(){
var man = 2;
function inner(){
var innerVar = 4;
alert(rain);
}
inner();    //调用inner函数
}
rainman();    //调用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没有块级作用域。
这一点也是JavaScript相比其它语言较灵活的部分。
仔细观察下面的代码,你会发现变量i、j、k作用域是相同的,他们在整个rain函数体内都是全局的。
<script type="text/javascript" language="javascript">
function rainman(){
/**
* rainman函数体内存在三个局部变量 i j k
*/
var i = 0;
if( 1 ){
var j = 0;
for( var k = 0 ; k < 3 ; k++ ){
alert( k );  


相关文档:

javascript开发系列(DOM操作)

选择元素:document.getElementsByTagName,document.getElementsById,document.getElementsByName。
               firstChild,lastChild,nextSibling,previousSibling
创建元素:document.createElement(),appendChild();
删除元素:removeC ......

javascript捕获窗口关闭事件


javascript捕获窗口关闭事件有两种方法
1.用javascript重新定义 window.onbeforeunload()  事件
在javascript里定义一个函数即可
function  window.onbeforeunload()  {  alert("关闭窗口")}
alert()事件将会在关闭窗口前执行,你也可以用户决定是否关闭窗口
function  window.o ......

用Javascript动态添加删除HTML元素实例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>用javascript动态添加删除html元素</title>
<script type="text/javascript"><!-- 
function $(nodeId) { 
re ......

Javascript 匿名函数及其代码模式原理

之前看了有关匿名函数的调用,感觉有必要和大家分享一下。
关于什么是匿名函数,及它带来的优势在本文就不深究了,先抛出一个常用的匿名函数:
(function(){alert('yo')})()
很多同学知道怎么用这种匿名函数,却或许并不明白为什么这样写就能够调用匿名函数。也许知道后面的圆括号是执行前面的函数,而并不清楚前面的圆 ......

常用的JavaScript验证正则表达式

本文将介绍几个常用的JavaScript验证正则表达式,这些资料希望对大家在实际编程过程中起到帮助作用。
匹配中文字符的正则表达式: [u4e00-u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^x00-xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号