javascript变量提升和闭包理解

请参考以下攻略:

JavaScript变量提升

什么是变量提升?

变量提升是 Javascript 中的一种特性,它指的是在代码执行前,所有的变量声明都会被提升到代码的开头部分,但是赋值操作并不会被提升。也就是说,变量声明后的变量名可以在声明之前被使用,但是变量值会返回 undefined。

示例一:

console.log(a); // Output: undefined
var a = 5;

变量 a 的声明被提升到代码的顶部,但是赋值操作并没有被提升。所以,输出的是 undefined。

示例二:

console.log(sum(4, 6)); // Output: 10
function sum(a, b) {
  return a + b;
}

函数声明也可以被提升,所以函数可以在声明之前被使用。

let 和 const 的变量提升

let 和 const 的变量提升与 var 的不同。它们会将声明封装在一个称为暂存死区 (Temporal Dead Zone / TDZ) 的区域内,变量在此期间就不能被访问。

示例:

console.log(a); // Output: ReferenceError
let a = 5;

let 的变量声明没有被提升,所以访问 a 会引发 ReferenceError 错误

JavaScript闭包

什么是闭包?

闭包是 Javascript 中一个非常重要的概念,也是一个函数与其词法作用域中的变量环境的集合体。在一个函数内部,我们可以访问到本函数作用域中的变量和全局作用域中的变量。当本函数执行完后,这个作用域通常就会被销毁,但是当存在一个闭包时,这个被销毁的作用域仍旧存在,并且可以被外部环境所访问。

示例一:

function outerFunction() {
  var name = "Alice";
  function innerFunction() {
    console.log(name);
  }
  return innerFunction;
}
var myFunction = outerFunction();
myFunction();

innerFunction() 定义在 outerFunction() 的内部,也就是在一个私有的作用域内。但是让它成为了闭包,是因为它被外部函数返回,并且可以访问到它定义时的作用域中的变量。在这个例子中,innerFunction() 可以访问 name 变量,因为它定义在 outerFunction() 中。

示例二:

function add(x) {
  return function(y) {
    return x + y;
  }
}
var addFive = add(5);
console.log(addFive(4)); // Output: 9

在这个示例中,add() 函数返回了一个闭包,它通过定义一个函数返回另一个函数。这个闭包可以访问 add() 中定义的变量,因为它拥有 add() 中定义的作用域。在这个例子中,闭包可以访问 x 的值 5。在调用 addFive(4) 时,闭包会将 5 和传入的参数 4 相加,返回 9。

以上就是 JavaScript 变量提升和闭包理解的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript变量提升和闭包理解 - Python技术站

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

相关文章

  • 在web worker中使用fetch实例详解

    下面是针对“在web worker中使用fetch实例详解”的完整攻略: 什么是Web Worker Web Worker是一项Web技术,它是一种能够让JavaScript代码在浏览器后台运行的机制。通过Web Worker,可以让一部分长时间运行的JavaScript代码运行在单独的线程中,而不会阻塞UI线程的运行,从而提高了JavaScript的执行效…

    JavaScript 2023年5月28日
    00
  • 前端设计模式——MVC模式

    MVC模式(Model-View-Controller):是一种前端和后端都广泛应用的设计模式。它将应用程序的业务逻辑、数据表示和用户界面分离,使得开发人员可以独立地修改各部分而不影响其他部分。MVC设计模式有助于提高代码的可读性、可维护性和可重用性。 MVC是Model-View-Controller的缩写,它将一个应用程序分为三个部分: 1. Model…

    JavaScript 2023年4月18日
    00
  • javascript常用方法总结

    作为网站作者,我可以为您提供“Javascript常用方法总结”的完整攻略。 1. 简介 Javascript是一种广泛应用于web开发的编程语言,它具有很多强大的方法,可以对页面上的元素进行操作、获取信息、修改样式等等。在本篇攻略中,我将为大家梳理一些常用的javascript方法及其使用方法,希望能对前端开发的同学有所帮助。 2. 常用方法 2.1. g…

    JavaScript 2023年5月17日
    00
  • JS ES新特性 模板字符串

    JS ES新特性 模板字符串是指一种更加灵活、可读性更高的字符串写法,它可以在字符串中嵌入表达式、变量、函数调用等。 模板字符串的基本语法 使用模板字符串时,我们需要使用反引号( )将字符串包裹起来。在反引号中,我们可以使用${}` 来引用变量、表达式等。例如: const name = "Tom"; const age = 18; co…

    JavaScript 2023年5月28日
    00
  • JS实现含有中文字符串的友好截取功能分析

    让我来详细讲解一下 “JS实现含有中文字符串的友好截取功能分析” 的完整攻略。 1. 背景 在前端开发中,经常需要对文本进行截取展示,但是如果直接使用JS自带的字符串截取方法,会出现截取中文时的问题。因为中文字符在计算机中占用两个字节,如果按照字节截取,就会出现乱码或者截取到半个中文的情况。因此,我们需要对字符串截取封装一个方法,可以实现友好的中英文截取,而…

    JavaScript 2023年5月19日
    00
  • javascript asp教程错误处理

    接下来我将会给出一个完整的JavaScript ASP教程错误处理攻略,包含代码示例。 JavaScript ASP教程错误处理攻略 什么是错误处理? 在ASP中,错误处理是用于捕获和解决在代码运行时发生的错误和异常的技术。当您的代码出现错误时,错误处理将停止代码的执行, 并提供一些信息,比如错误类型、行号、错误描述等等,以方便调试和修复页面。 如何进行错误…

    JavaScript 2023年6月10日
    00
  • .net 获取浏览器Cookie(包括HttpOnly)实例分享

    对于获取浏览器Cookie,我们需要了解浏览器的机制。浏览器的Cookie可以通过JavaScript代码进行读取,但是有些Cookie被设置为HttpOnly属性,此时JavaScript将无法读取该Cookie。因此我们需要通过服务端代码获取HttpOnly的Cookie。 在.NET中,我们可以通过以下步骤获取浏览器的Cookie,包括HttpOnly…

    JavaScript 2023年6月11日
    00
  • js获取时间并实现字符串和时间戳之间的转换

    获取时间是前端开发中的常见需求,一般有两种方式获取时间,一种是获取当前时间,另一种是获取指定时间。在这基础上,我们可以实现字符串和时间戳之间的相互转换。 获取当前时间 我们可以使用new Date()对象获取当前时间,然后将其转换为需要的字符串格式。以下代码展示了如何将当前时间转换为年-月-日时分秒格式: // 获取当前时间 let now = new Da…

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