kangkangblog

Menu

javascript之块级作用域

javascript是没有块级作用域的

在函数中声明的变量在任意位置都是有效的

EG:

var name='kang';

function AlterName(){

    alert(name);  //undefined

    var name="wen";

    alert(name); //wen

}

AlterName();

以上代码可以很好的看出这种特性

在当前局部作用域实际上是有声明变量name的而第一个alter在变量name声明赋值

所以alter未定义  而第二个alter就更好理解了

再看一段代码

eg:

function AlterValue(){

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

        console.log(i);//i

    }

    alert(i);//10

}

AlterValue();

上面这段代码

在控制台输出了0-9

而弹窗并不是别的语言似的弹出未定义

而是弹出10

块语句中定义的变量实际上是在包含函数中而非在语句中创建的!

函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的

我们可以通过创建一个闭包来模仿这种块级作用域的效果

function AlterValue(){

    (function(){

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

            console.log(i);//i

        }})();

    alert(i);//报错

}

AlterValue();

分析一下原理

实际上做了什么?

创建了一个闭包 此时这个匿名函数是可以调用函数内部的变量的

但是匿名函数外部 却无法调用这个匿名函数内部的变量

所以此时再alter(i)就会报错

在javascript 调用变量之后如果新手容易模糊应该在调用结束之后手动给一下var xx;或者var xxx=null;

手动清理一下当然这只是一个建议


这种私有作用域的方法 常用于避免命名冲突和影响全局作用域

That's all

— 于 共写了796个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注