js中变量的作用域

我们都明白局部变量的优先级大于全局变量,或者说内围作用域的变量的优先级比外围的高。如果在当前作用域找不到此变量时,它就往外围的作用域找。不过,在这之前,有一个值得注意的问题就是:究竟当前作用域有没有这个变量。像javascript这样的解释型语言,基本分为两个阶段,编译期(下面为符合大多数语言的称呼习惯,改叫预编译)与运行期。在预编译阶段,它是用函数来划分作用域,然后逐层为var变量与函数定义分配内存空间,再然后对var变量进行特殊处理,统统赋初始值为undefined。

var a=100;
var b=true;
function test(){
alert(a);
alert(b);
b=false;
alert(b);
var a=200;
alert(a);
}
test();
第一次a输出的是undefine,第一次b输出的是true;
第二次a的输出的是200,第二次是b是false;
把上面的例子修改一下
var a=100;
var b=true;
function test(){
alert(a);
alert(b);
var b=false;
alert(b);
var a=200;
alert(a);
}
test();
第一次a输出的是undefine,第一次b输出的是undefine;
第二次a的输出的是200,第二次是b是false;
 

javascript的作用域是指变量和函数可以访问的范围,分为局部作用域和全局作用域,这个和C语言是类似的,但是不同点是javascript的作用域没有块级作用域,不像C语言的{}可以表示一个块级的作用域,javascript只有函数作用域,在函数内部声明的变量只能在函数体和子函数可以访问,这个函数的外部不能访

//没有块级作用域

if(true){

var n=1;

}

alert(n);//1

for(var i=0;i<10;i++){

}

alert(i);//10

上面的例子要是在C语言或者java中n和i会在{}语言执行完之后销毁,在javascript中可以看到,它们并没有销毁,说明并没有块级作用域。

 

 

 

js中变量的作用域,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。