JavaScript的变量作用域和闭包操作

本文深入探讨了JavaScript中的作用域概念,包括局部作用域和全局作用域的区别,并通过实例详细解析了作用域链的工作原理及其如何实现变量的访问。此外,还介绍了闭包的概念及其在实际开发中的应用。

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

    初次写稿,有什么技术问题,可以直接call我!

变量的作用域

        每个函数 来定义作用域,函数内部用var来声明,那么这个变量只能允许在本函数内使用,那么此时就像是骑车的班头米玻璃一样,在函数里面可以看到外面的变量,但是在函数外面却不能看到函数里面的变量;作用域之间的相互嵌套,将形成作用域链,函数的嵌套将形成闭包

  作用域

JavaScript中有两种作用域:局部作用域和全局作用域;

<script>
var func = function(){
var a = "nihao";
console.log(a);
}
var funcab = function(){
var b = "shijie";
console.log(b);
}
func();
funcab();
</script>

这一段程序现在运行是没有问题的,但是如果在funcab中让函数输出变量a,程序就会报错

    作用域链

在JAvaScript中访问一个变量时,将本地变量和参数开始,逐级向上遍历作用域直到全局作用域。

var scope = 0, zero = "global-scope";
(function(){
     var scope = 1, one = "scope-1";
     (function(){
         var scope = 2, two = "scope-2";
        (function(){
            var scope = 3, three = "scope-3";
            // scope-3 scope-2 scope-1 global-scope
            console.log([three, two, one, zero].join(" "));
            console.log(scope); // 3
         })();
        console.log(typeof three); // undefined
        console.log(scope); // 2
     })();
    console.log(typeof two); // undefined
    console.log(scope); // 1
})();
console.log(typeof one); // undefined
console.log(scope); // 0

这样的例子就相当于:你没钱花了可以找你爸爸要,然后爸爸没有,你就可以去找你爷爷,依次向上找;但是如果你爸爸没有钱,

他是不会像你要钱的;

闭包

只要存在调用内部函数的可能,JavaScript就需要保留被引用的函数,而且JavaScript运行时需要跟踪引用这个内部函数的所有变量,知道最后一个变量废弃,JavaScript的垃圾收集器才能释放相应的内存空间

闭包最大的用处有两个:函数外部的变量可以读取函数内部的变量;让这些变量的值始终保持在内存中;

function fcu(){
var n = 111;
Add = function(){
n+=1;
}
function ffs(){
alert(n);
}
return ffs;
}
var result = fcu();
result();  ///111
Add();
result();  ///112


使用闭包的注意点:由于闭包会使得函数中的变量被保存在内存中,内存消耗很大;所以不能滥用闭包,否则会造成网页的性能问题;闭包会在父函数外部改变父函数内部变量的值,不要随便改变父函数内部变量的值;









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值