浅谈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日

相关文章

  • 如jQuery般易用的api风格代码分享

    如jQuery般易用的API风格的代码分享,通常是指通过简洁易读的API接口、规范明确的代码结构、充分考虑可扩展性和兼容性等方式,让其他开发者能够简单、快速地使用你的代码,从而提高软件开发的效率。 下面是一些实现这种代码分享的建议: 1. 使用常用的API方法和命名规范 为了让你的API接口和代码逻辑更加易读和易懂,建议尽可能使用常见的API方法和命名规范。…

    JavaScript 2023年5月19日
    00
  • asp.net 无刷新翻页就是这么简单

    下面我将为您详细讲解“ASP.NET 无刷新翻页就是这么简单”的完整攻略。 1. 安装 jQuery 插件 由于无刷新翻页和 jQuery 插件有关系,因此需要在页面中引用 jQuery 插件。可以在 jQuery 官网 上下载最新版的 jQuery 插件,然后将其引用到项目目录下,并在页面头部引入: <script src="jquery-…

    JavaScript 2023年6月11日
    00
  • js转html实体的方法

    js转html实体的方法一般用于将HTML代码中的实体字符(比如<,>,&等)转义为对应的实体字符,避免出现一些显示问题或者安全问题。下面是js转html实体的方法的攻略: 方法一:使用innerHTML属性 我们可以通过创建一个新的元素,设置其innerHTML属性,并获取innerHTML属性来将实体字符转化为 HTML 实体。示例如…

    JavaScript 2023年5月19日
    00
  • JavaScript中英文字符长度统计方法示例【按照中文占2个字符】

    当统计JavaScript字符串长度时,需要注意中文和英文字符的不同处理方式,因为中文字符在Unicode编码中占两个字符的位置,而英文字符只占一个字符位置。 下面介绍几种方法来实现JavaScript中英文字符长度的统计。 方法一:正则表达式 使用正则表达式对中英文字符进行匹配,累加中文字符的个数,即可得到该字符串的长度。 function length(…

    JavaScript 2023年5月28日
    00
  • JavaScript 消息框效果【实现代码】

    JavaScript 消息框效果指的是在网页中弹出一些提示信息的效果,通常包括警告、确认、提示等类型。以下是实现该效果的完整攻略。 1. HTML 结构和样式 首先,我们需要创建 HTML 结构和样式,来实现弹出框的界面。以下是一个简单的 HTML 结构: <div class="modal"> <div class=&…

    JavaScript 2023年6月11日
    00
  • Javascript实现可旋转的圆圈实例代码

    下面是实现可旋转的圆圈的Javascript代码的攻略: 步骤一:HTML结构 首先,我们需要在HTML文件中创建一个canvas元素和一个用于控制旋转的按钮。 <canvas id="circle-canvas"></canvas> <button id="rotate-button"&…

    JavaScript 2023年5月28日
    00
  • DOM 基本方法

    DOM(Document Object Model,文档对象模型)是一套对 HTML 和 XML 文档的编程接口,它把整个文档抽象成一组“节点”和“对象”结构(包括元素、属性、文本等),开发者可以利用 DOM API 对页面进行增删改查等操作。 DOM 的基本方法主要有以下几类: 1. 获取元素对象 getElementById() getElementBy…

    JavaScript 2023年6月10日
    00
  • js 与或运算符 || && 妙用

    下面是关于“JS 与或运算符 || && 妙用”的完整攻略,包含两个示例说明: 一、JS 与或运算符概述 在JS中,&&和||是常用的逻辑运算符,它们可以将多个条件判断合并在一起。在编写条件判断语句时,通过巧妙地使用逻辑运算符,可以让代码更加简洁、易懂,提高开发效率。 1.1 逻辑与运算符(&&) 逻辑与运算符…

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