当前位置: 首页 > news >正文

作用域,预解析学习

作用域和预解析是 JavaScript 中的重要概念,理解这两个概念有助于更好地掌握变量的声明和作用范围。

作用域

作用域决定了变量的可访问性和生命周期。JavaScript 中有以下几种作用域:

  • 全局作用域

    • 全局作用域中的变量在整个程序中都可见。
    • 任何函数或代码块都可以访问这些变量。
    • 在 JavaScript 中,全局变量是在顶层作用域声明的。
  • 局部作用域

    • 局部作用域仅在特定的函数或代码块内部有效。
    • 例如,在函数内部声明的变量只在该函数内部可访问,外部无法访问。
    • 这有助于避免命名冲突。
  • 块作用域

    • 块级作用域是指在一对大括号 {} 内部声明的变量仅在该块内有效。
    • 在 ES6 及以后的 JavaScript 版本中,使用 let 和 const 声明的变量具有块级作用域。
  • 函数作用域

    • 函数作用域是指变量在函数内声明后仅在该函数内有效。
    • 在许多语言中(如 JavaScript),函数内部的变量不会影响外部同名变量。

词法作用域

  • 词法作用域是基于代码的结构来决定变量的作用域。
  • 在词法作用域中,嵌套的函数可以访问其外部环境中的变量。

预解析(Hoisting)

预解析是指 JavaScript 在执行代码之前,会将变量和函数的声明提升到其作用域的顶部。需要注意的是,只有声明会被提升,而赋值不会。
例如:

function outerFunction() {let outerVar = 'I am outside!';function innerFunction() {console.log(outerVar); // 访问外部变量}innerFunction();
}
outerFunction(); // 输出 'I am outside!'
  • 变量的预解析

    console.log(x); // 输出: undefined
    var x = 5;
    console.log(x); // 输出: 5
    

  • 在上面的例子中,变量 x 的声明被提升,但赋值 x = 5 保持在原位置。

  • 函数的预解析

    console.log(myFunction()); // 输出: "Hello"function myFunction() {return "Hello";
    }
    

  • 函数声明会被完整提升,所以可以在声明之前调用。

  • 作用域:确定变量的可访问性。
  • 预解析:变量和函数的声明在执行之前被提升,但赋值保持在原位置。
  • 总结

  • 全局作用域:可在整个程序中访问。
  • 局部作用域:仅在特定函数或代码块内访问。
  • 块级作用域:在 {} 内部的变量,仅限于该块可访问。
  • 函数作用域:变量仅在定义该变量的函数内可访问。
  • 词法作用域:嵌套的函数可访问其外部环境中的变量。

http://www.mrgr.cn/news/47631.html

相关文章:

  • uniapp 编程体验
  • XML XSLT:转换与呈现数据的力量
  • 说一下 HashMap 的实现原理?
  • 【idea】切换多个仓库到一个分支
  • HTTP Content-Type
  • 生成式专题的第三节课--cGAN的Pix2Pix
  • AI学习指南深度学习篇-变分自编码器(VAE)简介
  • <<迷雾>> 第10章 用机器做一连串的加法(6)--循环移位寄存器改进的控制器 示例电路
  • Java 集合 Collection常考面试题
  • Flink和elasticsearch的关系
  • Traefik + Docker
  • IT运维如果转行能干什么?
  • 建筑工程系列中级职称申报有什么要求?
  • [Leetcode] 560 Subarray Sum Equals K
  • DVWA | DVWA 靶场初识
  • Python 列表专题:访问元素
  • 【C++堆(优先队列)】1834. 单线程 CPU|1797
  • Java主流框架项目实战——SpringBoot入门
  • Golang | Leetcode Golang题解之第470题用Rand7()实现Rand10()
  • 代码随想录算法训练营| 39. 组合总和 、 40.组合总和II 、 131.分割回文串