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]