js变量作用域

本文深入探讨了JavaScript中的作用域概念,解释了局部变量如何在整个函数体内定义且隐藏全局变量,通过实例展示了作用域链与函数的关系,并强调了作用域与普通JS语句的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请先看一下代码:

        var scope = "global";
        function f() {
            alert(scope);//dispaly "undefined" not "global"
            var scope = "local";//Vaeiable initized here,but defined everywhere
            alert(scope);//display "local"
        }
        f();
为什么了?

局部变量在整个函数体都是有定义的,这意味着在整个函数体中隐藏了同名的全局变量。虽然局部变量在整个函数体都是定义的,但在执行var语句前,他是不会被初始化的,因此上面的函数f和下面的函数等价

 /* 
 * js函数是一个对象,scope是仅供js引擎访问的内部属性,包括创建对象属性的集合 
 * 当一个函数创建后它的作用域链被填充, 
 * 每个内部对象是独一的,所以多次调用一个函数会导致多次创建 
 * 当函数运行过程中遇到一个变量要搜索作用域, 
 */   
function f() {
            var scope;//局部变量在函数头声明
            alert(scope); //此处该变量有定义,但值为 "undefined" 
             scope = "local"; //初始化变量并赋值
            alert(scope);//此处该变量具有值
                }

还有请注意:作用域链 都是与函数 或则说 对象有关,与普通的js语句无关,如 for(var i=0;i<5;i+=){..} 这里的i的作用域仍在函数里而不是for循环,for不会增加作用域链中的对象.

在javascript中作用域是由函数划分的,而不是由块划分(if、while、for)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值