转:javascript变量的作用域

JS中作用域的概念:

  表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境。Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的。

 

一、无块级作用域

if(true){
var aa= "bb";
}
console.log(aa); //bb

for(var i = 0; i < 100; i++){
//do
}
console.log(i); //100

从第一题中可以看出来,在{}中执行后,变量并没有被销毁,还是保存在内存中的,因此我们可以访问到的。

二、JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.

var test = '1111111';
function aa() {
alert(test);
}

function bb() {
var test = '22222222';
aa();
}

bb();//alert(1111111);

 

三、JS会提前处理function定义式 和var关键字

  如下面代码:开始alert(bb); //undefine ,alert(age)//语法报错,这两个有什么区别呢,原因就是后面有var bb =“test”,在初始化的时候提前处理了var 这个关键字,只是这个开始未赋值

将代码修改成这样的,可以看出来

复制代码 代码如下:

var dd = '11111';
function aa() {
   alert(bb);//undefine  //在这一步,因为后面有var bb =“test”,在初始化的时候提前处理了var 这个关键字,只是这个开始未赋值
   var bb = 'test';  //走到这一步 ,才赋值
   alert(bb);//test
  var cc = "test1";
  alert(age);//语法错误
}
aa();
alert(dd);//11111
alert(cc);//语法报错  因为 函数里面的定义的变量,在函数执行完后就销毁了,不占有内存区域了


但是请注意:

复制代码 代码如下:

<script>
alert(typeof aa); //结果:undefined
</script>
<script>
function aa() {
alert('yupeng');
}
</script>


这说明js预编译是以段为单元的。

转载http://www.jb51.net/article/30060.htm这篇文章,为了怕他删除,留个备份,并加深自己的理解,

再结合http://www.cnblogs.com/rubylouvre/archive/2009/08/21/1551270.html这个网址看一下,怎么形象的画作用域图,就能形象的理解了

posted on 2015-01-20 19:25  开心生活  阅读(174)  评论(0编辑  收藏  举报

导航