【JavaScript】18_函数的作用域与作用域链

简介: # 9、作用域​ 作用域(scope)- 作用域指的是一个变量的可见区域 - 作用域有两种:## 全局作用域- 全局作用域在网页运行时创建,在网页关闭时消耗- 所有直接编写到script标签中的代码都位于全局作用域中- 全局作用域中的变量是全局变量,可以在任意位置访问## 局部作用域- 块作用域 - 块作用域是一种局部作用域 - 块作用域在代码块执行时创建,代码块执行完毕它就销毁 - 在块作用域中声明的变量是局部变量,只能在块内部访问,外部无法访问```html<script> let a = "变量a" {

9、作用域

​ 作用域(scope)

  • 作用域指的是一个变量的可见区域

    • 作用域有两种:

全局作用域

  • 全局作用域在网页运行时创建,在网页关闭时消耗
  • 所有直接编写到script标签中的代码都位于全局作用域中
  • 全局作用域中的变量是全局变量,可以在任意位置访问

局部作用域

  • 块作用域

    • 块作用域是一种局部作用域
    • 块作用域在代码块执行时创建,代码块执行完毕它就销毁
    • 在块作用域中声明的变量是局部变量,只能在块内部访问,外部无法访问
<script>
    let a = "变量a"
    {
        let b = "变量b"
        {
            {
                console.log(b)
            }
        }
    }

    {
        console.log(b)
    }
</script>

10、函数作用域

函数作用域

  • 函数作用域也是一种局部作用域
  • 函数作用域在函数调用时产生,调用结束后销毁
  • 函数每次调用都会产生一个全新的函数作用域
  • 在函数中定义的变量是局部变量,只能在函数内部访问,外部无法访问
    <script>
        function fn(){
            let a = "fn中的变量a"

            console.log(a)
        }
        fn()
        console.log(a)
    </script>

11、作用域链

- 当我们使用一个变量时,

JS解释器会优先在当前作用域中寻找变量,就近原则

如果找到了则直接使用

如果没找到,则去上一层作用域中寻找,找到了则使用

如果没找到,则继续去上一层寻找,以此类推

如果一直到全局作用域都没找到,则报错 xxx is not defined

    <script>
        // let a = 10

        {
            // let a = "第一代码块中的a"
            {
                // let a = "第二代码块中的a"
                // console.log(a)
            }
        }

        let b = 33
        function fn(){
            let b = 44

            function f1(){
                let b = 55
                console.log(b)
            }

            f1()
        }
        fn()
    </script>
相关文章
|
1月前
|
JavaScript 前端开发
js的作用域作用域链
【10月更文挑战第29天】理解JavaScript的作用域和作用域链对于正确理解变量的访问和生命周期、避免变量命名冲突以及编写高质量的JavaScript代码都具有重要意义。在实际开发中,需要合理地利用作用域和作用域链来组织代码结构,提高代码的可读性和可维护性。
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]作用域的“生产者”——词法作用域
本文介绍了JavaScript中的作用域模型与作用域,包括词法作用域和动态作用域的区别,以及全局作用域、函数作用域和块级作用域的特点。通过具体示例详细解析了变量提升、块级作用域中的暂时性死区等问题,并探讨了如何在循环中使用`var`和`let`的不同效果。最后,介绍了两种可以“欺骗”词法作用域的方法:`eval(str)`和`with(obj)`。文章结合了多位博主的总结,帮助读者更快速、便捷地掌握这些知识点。
33 2
[JS]作用域的“生产者”——词法作用域
|
1月前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
41 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
1月前
|
前端开发 JavaScript 数据处理
CSS 变量的作用域和 JavaScript 变量的作用域有什么不同?
【10月更文挑战第28天】CSS变量和JavaScript变量虽然都有各自的作用域概念,但由于它们所属的语言和应用场景不同,其作用域的定义、范围、覆盖规则以及与其他语言特性的交互方式等方面都存在明显的差异。理解这些差异有助于更好地在Web开发中分别运用它们来实现预期的页面效果和功能逻辑。
|
1月前
|
JavaScript 前端开发
如何在 JavaScript 中实现块级作用域?
【10月更文挑战第29天】通过使用 `let`、`const` 关键字、立即执行函数表达式以及模块模式等方法,可以在JavaScript中有效地实现块级作用域,更好地控制变量的生命周期和访问权限,提高代码的可维护性和可读性。
|
1月前
|
JavaScript 前端开发
javascript的作用域
【10月更文挑战第19天javascript的作用域
|
1月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
2月前
|
JavaScript 前端开发
JavaScript 作用域
JavaScript 作用域是指程序中可访问的变量、对象和函数的集合。它分为函数作用域和局部作用域。函数作用域内的变量仅在函数内部可见,而全局作用域的变量在整个网页中均可访问。局部变量在函数执行完毕后会被销毁,而全局变量则在整个脚本生命周期中都存在。未使用 `var` 关键字声明的变量默认为全局变量。
|
2月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
2月前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。