JavaScript 闭包

本文通过实例讲解了JavaScript中的闭包概念,如何利用闭包实现即时调用函数表达式(IIFE),确保代码安全性,并详细解释了变量与函数的提升机制,以及let和const在变量声明上的优势。

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

不严格的说闭包就是函数,直接上例子

 

let f;
{
    let o = { note:"Safe"};
    f = function(){
        return o;
    }
}
let oRef = f();
oRef.note = "UnSafe Any More"

 

在块的外部依然可以访问到内部变量o,那么这个块(包括父作用域)构成了一个闭包,不管在任何地方调用oRef,他都有权限访问块中的变量o。

 

 

即时调用函数表达式:IIFE,使用函数内部数据,确保安全性,可返回任意类型(数组,对象,函数)

const massage = (function(){
    const secret = "Im a secret";
    return `the secret is ${secret.length} characters long.`
})();
console.log(massage);

secret因为在函数中,函数外是无法访问的.

 

提升机制:

1 变量的提升

x;
let x = 4;//会报错

x;//undefined
var x = 4;
x;//4

在以上的例子中可以看到使用var定义的话会把该变量的声明提升至该作用域的顶部。(不是提升赋值)

 

var可重复赋值,let和const不可以。let可完全取代var

 

2 函数的提升:

f();
function f(){
    console.log('f');
}

在第一行f()也会执行打印‘f’。

f();
let f =function(){
    console.log('f');
}

此时在第一行f()就会报错。在let之前就是该变量的“临时死区”(TDZ)

转载于:https://www.cnblogs.com/BigJ/p/7911523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值