聊聊JavaScript作用域

几乎所有的语言都有作用域的概念,简单的说,作用域就是变量和函数的可访问范围,即作用域控制在变量和函数的可见性和生命周期。

变量作用域

是程序源代码中定义这个变量的区域。

1、全局变量拥有全局作用域,在 JS 代码中的任何地方都是有定义的。

2、在函数内声明的变量只在函数体内有定义。函数参数也只在函数体内有定义。

3、在函数体内,局部变量的优先级高于同名的全局变量。如果在函数体内声明一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就被局部变量所遮盖。

var scope = "global";        //声明一个全局变量 
function checkscope() {      
    var scope = "local";     //声明一个同名的局部变量
    return scope;            //返回局部变量的值,而不是全局变量的值
}
checkscope()                 // => "local"

函数作用域

在一些类似 C 语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,我们称为块级作用域。javascript 中没有块级作用域,而是使用了函数作用域,变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。

function test(o) {
    var i = 0;           //i在整个函数体内均是有定义的
    if(typeof o == "object") {
        var j = 0;                     //j在函数体内是有定义的,不仅仅是在这个代码段内
        for(var k = 0; k < 10; k++) {            //k在函数体内是有定义的,不仅仅是在循环内
            console.log(k);           //输出数字0-9
        }
        console.log(k);               //k已经定义了,输出10
    }
    console.log(j);                //j已经定义了,但可能没有初始化
}

声明提前

javascript 的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。变量在声明之前甚至已经可以使用。这个特性被称为声明提前。即 javascript 函数里声明的所有变量都被提前至函数体的顶部。

var scope = "global";function f() {
    console.log(scope);           //输出"undefined",而不是"global"
    var scope = "local";          //变量在这里赋初始值,但变量本身在函数体内任何地方均是有定义的
    console.log(scope);       //输出"local"
}
/* var scope = "global";
* function f() {
*** var scope;
*   console.log(scope); 
*   var scope = "local";          
*   console.log(scope);      
*}
*/

想要了解更多相关知识,可访问 前端学习网站!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值