黑马程序员技术交流社区

标题: JavaScript变量的作用域 [打印本页]

作者: 王毅    时间: 2013-3-13 21:04
标题: JavaScript变量的作用域
在JS里面

声明局部变量和全局变量的区别
首先全局变量定义作用于全局

<script>

var i;

</script>

局部变量作用于块

<script>

var i;

function abc()

{

    var a;

    b=10;

}

</script>

这里的a为局部变量,但是b是全局变量
因为只要声明变量时不声明var就表示该变量就默认转为全局变量
重点是:函数中声明的变量的作用域在整个函数,不分块级作用域

例子:
<SCRIPT LANGUAGE="javascript">
var i=1;

function a2()
{
  alert(i);
  var i = 2;
  alert(i);

  if(true){if(true){if(true){var a=3;}}}

  alert(a);
}

</script>

整个例子中第一个alert会显示undefine 未声明
因为不管全局变量.
局部的变量的优先级高于全局变量
但是只要据我猜测是当调用函数的时,会先加载所有的变量,带不会带值,所以这里就会出现undefine,据我试验,发现只要是变量都会在SCRIPT脚本运行时先加载,但不会带值!
(原因是:当局部变量在函数嵌套函数的时候,当在最里层的函数碰到变量时会调用变量解析器,这个时候变量解析器首先会在这个函数内找到该变量,如果找不到就会继续往外层寻找到该变量知道找到为止,找不到会报错)

第二个alert会显示2,因为已经复制了

第三个alert会显示3,因为不管a声明在哪里只要在函数内,他的作用域就是函数内.





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2