JavaScript的作用域和块级作用域概念理解

yizhihongxing

JavaScript作用域

在JavaScript中,作用域控制着变量和函数的可见性和生命周期。作用域是定义变量、函数以及访问它们的地方的一套规则。

作用域分为全局作用域和局部作用域。在函数中定义的变量、函数参数以及函数内部声明的函数都属于该函数的局部作用域。全局作用域包含了浏览器环境下的所有对象和方法,函数内部可以访问全局变量。

JavaScript作用域规则:
1.全局变量可以在整个程序范围内访问,函数内部可以访问全局变量
2.函数内部声明的变量只能在函数内部访问
3.函数内部可以访问全局变量
4.变量在出现在赋值表达式左侧时进行声明和初始化,赋值表达式右侧可以是任何类型

示例1:

var globalVar = 1; // 全局变量

function myFunc() {
  var localVar = 2; // 局部变量
  console.log(globalVar); // 可以访问全局变量
  console.log(localVar); // 可以访问局部变量
}

myFunc(); // 函数运行
console.log(globalVar); // 可以访问全局变量
console.log(localVar); // 局部变量无法在函数外部访问

示例2:嵌套函数

function outer() {
  var a = 1;

  function inner() {
    var b = 2;
    console.log(a); // 可以访问外部函数的变量
  }

  inner(); // 调用内部函数
}

outer(); // 调用外部函数

块级作用域

JavaScript是ES6之前没有块级作用域的,只有全局作用域和函数作用域。而块级作用域类似于函数作用域,但是只存在于if语句、循环语句、try/catch语句以及ES6新增的let和const关键词中。

块级作用域规则:
1.变量和函数在块级作用域中声明时只存在于该块级作用域中,不会污染全局变量
2.块级作用域中存在变量提升,但需要注意使用let和const关键词
3.块级作用域在外部无法访问其中的变量

示例3:if语句块级作用域

var a = 1;
if (true) {
  var a = 2;
}
console.log(a); // 2

使用var声明变量时,if语句中的a变量会覆盖全局变量a,导致输出结果为2。

示例4:let语句块级作用域

let b = 1;
if (true) {
  let b = 2;
  console.log(b); // 2
}
console.log(b); // 1

使用let声明变量时,if语句中的变量b只存在于该块级作用域中,不会影响全局变量b,输出结果为2和1。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript的作用域和块级作用域概念理解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • javascript操作元素的常见方法小结

    下面就是”javascript操作元素的常见方法小结”的完整攻略: JavaScript操作元素的常见方法小结 在JavaScript中,我们经常需要通过某个元素的id/class名字获取到该元素,然后进行一些操作,比如修改其文本内容、改变其样式等等。那么,JavaScript中有哪些常见的操作元素的方法呢? 1. 通过id获取元素 在HTML中,每个元素都…

    JavaScript 2023年6月10日
    00
  • JavaScript中String.match()方法的使用详解

    JavaScript中String.match()方法的使用详解 简介 JavaScript提供了很多方法操作字符串,其中String.match()是一种常用的方法。它可以在一个字符串中查找匹配一个正则表达式的内容,并返回匹配结果。 语法 String.match(regexp) 其中,regexp是一个正则表达式对象。 返回值 String.match(…

    JavaScript 2023年5月28日
    00
  • Javascript 闭包详解及实例代码

    JavaScript 闭包详解及实例代码 什么是闭包? 在 JavaScript 中,闭包是一种特殊的函数,它可以访问在它创建时外部作用域的变量和参数,即使这些变量和参数在函数调用时已经不存在了。 简单来说,闭包就是“函数和函数所能够访问的外部变量的一个共同体”。 闭包的运作原理 在 JavaScript 中,每次创建一个函数,都会同时创建一个作用域链(sc…

    JavaScript 2023年6月10日
    00
  • mockjs,json-server一起搭建前端通用的数据模拟框架教程

    搭建前端数据模拟框架可以帮助我们在开发前端页面时,模拟后端数据库返回的数据,提高开发效率。本文将详细讲解如何使用mockjs和json-server搭建前端通用的数据模拟框架。 1. 安装mockjs和json-server 首先,在项目根目录下安装mockjs和json-server: npm install mockjs json-server –sa…

    JavaScript 2023年5月27日
    00
  • js判断输入是否为数字的具体实例

    针对“js判断输入是否为数字的具体实例”的问题,我总结了以下的完整攻略: 1. 使用typeof运算符判断数据类型 JavaScript中可以使用typeof运算符来得出变量的数据类型,如果输入是一个数字,它的类型应该是“number”,以下是一个示例代码: let inputNum = prompt("请输入一个数字:"); if (t…

    JavaScript 2023年5月28日
    00
  • JS实现网页标题栏显示当前时间和日期的完整代码

    下面我为你讲解一下 JS 实现网页标题栏显示当前时间和日期的完整代码攻略。 首先,我们需要了解两个 Javascript 方法:setInterval() 和 toLocaleTimeString()。 setInterval() 方法会以指定的时间间隔(以毫秒为单位)重复调用某个函数。可用于创建定期执行的函数(也称为时间间隔函数)。 toLocaleTim…

    JavaScript 2023年5月27日
    00
  • JavaScript函数调用经典实例代码

    JavaScript函数调用经典实例代码攻略: 一、函数调用方式 JavaScript 中函数的调用分为四种方式: 函数调用 直接调用函数。 javascript function fn1() { console.log(“fn1 被调用了”); } fn1(); 方法调用 将函数作为对象的一个属性,通过该对象调用函数。 javascript var obj…

    JavaScript 2023年5月27日
    00
  • JavaScript高级程序设计(第3版)学习笔记 概述

    JavaScript高级程序设计(第3版)学习笔记 概述 为什么要学习JavaScript高级程序设计? JavaScript是现代web开发中最重要的一门编程语言之一。学习JavaScript高级程序设计能够让我们更加深入地了解JavaScript的内部机制,掌握JavaScript的高级特性和技巧,开发出更加高效、可维护、可扩展的web应用程序。 怎样开…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部