浅谈JavaScript作用域

当我们了解JavaScript时,作用域是一个十分重要的概念。它是指 JavaScript 中变量的可访问性。本文将浅谈 JavaScript 的作用域及其相关概念,并通过两个例子来说明作用域的不同。

全局作用域

在 JavaScript 中,最顶层的作用域被称为全局作用域。全局作用域中的变量和函数在代码的任何地方都是可访问的。可以通过以下代码来定义一个全局变量:

var globalVar = 'This is global variable';

全局变量是在最外层声明的变量。由于它对于代码的任何部分都是可访问的,因此要尽量减少全局变量的使用。因为全局变量越多,就越容易发生变量互相覆盖的问题。

函数作用域

在 JavaScript 中,每个函数都有它自己的作用域,被称为函数作用域。这意味着函数作用域中声明的变量和函数只能在函数内部访问。

下面是一个简单的函数作用域的示例:

function myFunction() {
  var localVar = 'This is local variable';
  console.log(localVar);
}

在这个示例中,localVar 是在函数中声明的变量。只有在函数内部才有权访问这个变量。如果在函数外部访问该变量,就会得到一个未定义的错误。这是因为 localVar 只在 myFunction 函数内部存在。

块级作用域

在 ES6(ECMAScript 2015)中,JavaScript 引入了一个新概念 - 块级作用域。块级作用域是指在代码块内定义的变量和函数,在代码块外部是不可访问的。块级作用域可以使用 letconst 声明。

以下示例演示了块级作用域的概念:

if (true) {
  let localVar = 'This is local variable';
  console.log(localVar);
}

console.log(localVar); // 报错,localVar 不是一个定义过的变量

上面的代码中,当 if 语句执行时,它内部的代码块里声明了一个名为 localVar 的变量。但是在该代码块外部,该变量就不存在了,因此最后的 console.log(localVar); 会报错。

闭包

闭包是 JavaScript 中一个重要的概念,也是很多初学者难以理解的概念。在 JavaScript 中,每个函数都会形成自己的作用域。而当函数内部存在另一个函数时,内部函数就会形成一个闭包。每个闭包都可以访问它外部作用域中的变量和函数,在某些情况下,闭包可以用来创建私有变量和私有方法。

以下是一个使用闭包来创建私有变量的示例:

function counter() {
  var count = 0;

  function add() {
    count++;
    console.log('Count: ', count);
  }

  return add;
}

var addFunc = counter();
addFunc(); // 输出 "Count: 1"
addFunc(); // 输出 "Count: 2"

在上面的示例中,counter 函数只在一次调用中执行,但其返回的 add 函数和 count 变量形成了一个闭包。每次调用 addFunc 时,都能访问到该闭包中的 count 变量,并增加它的值。

示例1

以下示例演示了函数嵌套产生的闭包的概念:

function parentFunc() {
  var parentVal = 100;

  function childFunc() {
    var childVal = 50;
    console.log(parentVal + childVal);
  }

  return childFunc;
}

var childFunc = parentFunc();
childFunc(); // 输出 "150"

在上面的示例中,childFunc 函数的内部访问了 parentVal 变量。由于 childFunc 是在 parentFunc函数内部定义的,所以 childFunc 形成了一个闭包,能够访问 parentVal 变量。

示例2

以下示例演示了重复声明变量导致作用域覆盖的概念:

var globalVal = 'This is global variable';

function myFunction() {
  var globalVal = 'This is local variable';
  console.log(globalVal);
}

myFunction(); // 输出 "This is local variable"
console.log(globalVal); // 输出 "This is global variable"

在上面的示例中,globalVal 变量被重复声明两次。函数内部的变量 globalVal 覆盖了全局作用域中的同名变量,因此在函数内部打印 globalVal 时输出了 "This is local variable" 。而在函数外部依然可以访问全局作用域的 globalVal,它的值为 "This is global variable"。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈JavaScript作用域 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript中数组成员的添加、删除介绍

    JavaScript中数组成员的添加、删除介绍 JavaScript中的数组是一种特殊的对象,我们可以通过数组索引将多个值存储在其中,并可以方便地进行添加、删除等操作。 添加元素 JavaScript提供了多种向数组中添加元素的方法: 1. push() push() 方法可以在数组的末尾添加一个或多个元素,并返回数组的新长度。 let arr = [‘ap…

    JavaScript 2023年5月27日
    00
  • NodeJS有难度的面试题(能答对几个)

    下面我会详细讲解一下 “NodeJS有难度的面试题(能答对几个)” 的完整攻略。 1. Node.js的基础知识 在面试过程中,面试官通常会问到一些基础的 Node.js 知识,例如: Node.js 是什么? npm 是什么? 有什么用? 如何在 Node.js 中使用第三方模块? 什么是模块? 如何定义并导入模块? 针对这些问题,你需要先通过自学文档以及…

    JavaScript 2023年5月28日
    00
  • Javascript Array slice 方法

    以下是关于JavaScript Array slice方法的完整攻略。 JavaScript Array slice方法 JavaScript Array slice方法用于从数组中提取指定的元素,并将其作为一个新数组返回。该方法不改变原始数组,而是返回一个新的数组。 下面是一个使用slice方法的示例: var arr = [1, 2,3, 4, 5]; …

    JavaScript 2023年5月11日
    00
  • Jquery 快速构建可拖曳的购物车DragDrop

    下面我将介绍如何使用JQuery 快速构建可拖曳的购物车DragDrop,包括下面的内容: 安装和导入JQuery脚本文件 构建基础的HTML结构 实现拖拽操作以及购物车的添加和删除 步骤一:安装和导入JQuery脚本文件 首先,你需要下载JQuery脚本文件。你可以在官方网站下载JQuery的最新版本,也可以使用CDN服务,比如: <script s…

    JavaScript 2023年6月10日
    00
  • JavaScript中Reduce10个常用场景技巧

    JavaScript中reduce是一个非常有用的数组方法,它可以对一个数组的所有元素进行迭代,并返回一个最终的结果。reduce方法有很多应用场景,下面将介绍十个常用场景技巧。 1. 数组求和 使用reduce方法可以很方便地对数组中的数值进行求和。只需将reduce方法的初始值设置为0,每次迭代时将两个数值相加即可。 const arr = [1, 2,…

    JavaScript 2023年6月10日
    00
  • 原生JS写Ajax的请求函数功能

    这里将详细讲解如何使用原生JS编写Ajax请求函数,具体过程包括:创建XMLHttpRequest对象、设置请求方式、设置请求体、发送请求、获取响应数据,下面我们一步一步来看。 创建XMLHttpRequest对象 在使用Ajax向服务器发送请求之前,需要创建一个XMLHttpRequest对象,它是浏览器提供的用于在后台与服务器进行通信的对象。创建方式如下…

    JavaScript 2023年6月11日
    00
  • javascript常用正则表达式汇总

    Javascript常用正则表达式汇总 正则表达式是一种强大的工具,可以用来匹配、查找和替换文本中的模式。在JavaScript中,也可以通过正则表达式来完成字符串的相关操作。这里汇总了JavaScript中常用的正则表达式,希望能够帮助大家更好地处理字符串。 匹配数字 要匹配数字,可以使用\d来表示数字字符,加上一个可选的+或*表示匹配一次或者多次。下面是…

    JavaScript 2023年6月1日
    00
  • JavaScript运动函数实例详解

    JavaScript运动函数实例详解 运动函数是实现网页动画效果的必备工具之一,JavaScript中有多种运动函数实现方式,其中以JavaScript的定时器方式实现最为常见。本文将详细讲解使用JavaScript定时器实现运动函数的方法,同时给出两个示例说明。 定时器 JavaScript中用于实现定时器的函数是setInterval()和setTime…

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