露珠的微笑 发表于 2012-12-10 15:18:09

javscript变量作用域

<div id="cnblogs_post_body">总算把这疑问解决啦。从入职到现在一直很困惑.看了司徒正美的博客才总算明白,以下摘抄来自司徒正美博客《javascript变量的作用域 》,个人观点文章分析得非常好:
像javascript这样的解释型语言,基本分为两个阶段,编译期(下面为符合大多数语言的称呼习惯,改叫预编译)与运行期。在预编译阶段,它是用函数来划分作用域,然后逐层为其以 var 声明的变量(下略称为var变量)与函数定义开辟内存空间,再然后对var变量进行特殊处理,统统赋初始值为undefined
主要抓住一点:预编译为var变量与函数定义分配空间,有初值赋初值,没有的默认为Undefined,
                   然后按Js代码逐行执行
例子1:
<div class="cnblogs_code">var a=100;   var b=true;   function test(){       alert(a);//由于test函数用var声明了a,所以逐行执行时访问的是内围变量a,该内围变量还未赋值,js对末赋值的变量默认为undefined       alert(b);// 逐行执行到该行时,由于test函数作用域未用var声明b,所以js向外查看,外围有声明就用外围的b,外围若没声明就会报错:未定义b
    b=false;// 逐行执行到该行时,b的值被test作用改变了,所以此时b=true   
    alert(b);       var a=200; //内围变量a,逐行执行到这才赋值   alert(a/2);//访问已赋值的内围变量a}   test();
页: [1]
查看完整版本: javscript变量作用域