Day16 - 为什么一定要有块级作用域

简介: Day16 - 为什么一定要有块级作用域

知识点讲解


在Javascript提出块级作用域,主要是为了解决Javascript中的一个重要的设计缺陷 。


变量提升特性导致的大量与直觉不符的代码


变量提升是什么?


(function() {
  console.log(v)
  var v = 123
})()


js 在变量声明提升的时候会将 var 声明的变量以及 用关键字函数声明的函数都会提升到当前作用域的顶端 。赋值语句在原地等待赋值。


变量提升的优点是降低程序的编写难度。


为什么这么说,其实原始的程序在编写的时候是有明确的顺序要求的。


比如我们下面就看一个史前语言Pascal语言


网络异常,图片无法展示
|


完整的程序结构


网络异常,图片无法展示
|


这就好比王者荣耀为了降低操作难度不用回家买装备一样。


违反直觉的事


但是这种编写方法就会带来一些问题。毕竟是擅自修改了执行的逻辑。


主要分为线面两方面


内层变量会覆盖外层变量


var tmp = new Date();
function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}
f(); // undefined


以上程序,全局定义的变量,由于后面的程序定义了同名变量程序,居然凭空消失。


本应销毁的变量没有被销毁


这个其实就是著名的循环陷阱问题。前面几天说过就不仔细说了。


var s = 'hello';
for (var i = 0; i < s.length; i++) {
  console.log(s[i]);
}
console.log(i); // 5


面试攻略


谈到块级作用域的影响,多班会有人先谈现象,不谈本质。建议从语言缺陷完善的角度分析这个问题。


相关文章
|
8月前
|
JavaScript 前端开发
作用域链的理解
作用域链的理解
69 0
|
2月前
|
存储 缓存 JavaScript
哪些情况适合使用块级作用域,哪些情况适合使用函数作用域?
【10月更文挑战第29天】块级作用域和函数作用域在不同的场景下各有优势,合理地选择和运用这两种作用域可以使JavaScript代码更加清晰、高效和易于维护。在实际开发中,需要根据具体的业务需求、代码结构和编程模式来决定使用哪种作用域,或者在适当的情况下结合使用两者,以达到最佳的编程效果。
|
3月前
|
自然语言处理 JavaScript 前端开发
什么是闭包
【10月更文挑战第12天】什么是闭包
|
5月前
|
存储 自然语言处理 JavaScript
闭包
闭包
20 0
|
8月前
|
JavaScript
块级作用域、变量提升
块级作用域、变量提升
36 1
|
8月前
|
自然语言处理 JavaScript 前端开发
深入理解作用域、作用域链和闭包
在 JavaScript 中,作用域是指变量在代码中可访问的范围。理解 JavaScript 的作用域和作用域链对于编写高质量的代码至关重要。本文将详细介绍 JavaScript 中的词法作用域、作用域链和闭包的概念,并探讨它们在实际开发中的应用场景。
|
8月前
|
自然语言处理 JavaScript 前端开发
对作用域链的理解
对作用域链的理解
63 0
|
存储 缓存 前端开发
详解 Reat 中的闭包问题
JavaScript 中的闭包一定是最可怕的特性之一。 即使是无所不知的 ChatGPT 也会告诉你这一点。 它也可能是最隐秘的语言概念之一。 每次编写任何 React 代码时,我们都会用到它,大多数时候我们甚至没有意识到。 但最终还是无法摆脱它们:如果我们想编写复杂且高性能的 React 应用程序,我们就必须了解闭包。
111 0
详解 Reat 中的闭包问题
|
存储 JavaScript 前端开发
从执行上下文和作用域链理解闭包
从执行上下文和作用域链理解闭包
110 0
从执行上下文和作用域链理解闭包
闭包的使用
闭包的使用
77 0

热门文章

最新文章

下一篇
开通oss服务