JavaScript 闭包
不严格的说闭包就是函数,直接上例子
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)
分类:
JavaScript_Core
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Brainfly: 用 C# 类型系统构建 Brainfuck 编译器
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· Tinyfox 发生重大改版
· DeepSeek 全面指南,95% 的人都不知道的9个技巧(建议收藏)
· 对比使用DeepSeek与文新一言,了解DeepSeek的关键技术论文
· Brainfly: 用 C# 类型系统构建 Brainfuck 编译器
· DeepSeekV3+Roo Code,智能编码好助手