作用域、作用域链、闭包(面试经历)

一、闭包

概念:有权访问另一个函数作用域内变量的函数都是闭包。
代码:

function a(){
  var n = 0;
  this.inc = function () {
    n++; 
    console.log(n);
  };
}
var c = new a();
c.inc();  //控制台输出1
c.inc();  //控制台输出2

//注解:这里 inc 函数访问了构造函数 a 里面的变量 n,所以形成了一个闭包。

二、作用域链

概念:当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。

作用域链的前端,始终都是当前执行的代码所在环境的变量对象

如果这个环境是函数,则将其活动对象作为变量对象

活动对象在最开始时只包含一个变量,即arguments对象(这个对象在全局环境中是不存在的)。

作用域链中的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延续到全局执行环境

全局执行环境的变量对象始终都是作用域的最后一个对象

源码:

var color = "blue";
funciton ChangeColor(){
  if (color ==== "blue"){
    color = "red";
  }else{
    color = "blue";
  }
}

changeColor();

alert("Color is now " + color);

/*
*注解:函数changeColor()的作用域链包含两个对象:它自己的变量对象(其中定义着arguments对象)
*和全局环境的变量对象。可以在函数内部访问变量color,就是因为可以在这个作用域链中找到它。
*/

三、作用域

概念:变量的作用域有两种:全局变量和局部变量。
1、全局变量:
最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的

2、局部变量:
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的,最常见的例如函数内部

四、后记

JavaScript是一种广泛使用的编程语言,主要用于网页开发。

JavaScript的基本概念:

  • 变量和数据类型:在JavaScript中,你可以使用变量来存储各种数据,如数字、字符串、布尔值、对象、数组等。JavaScript是一种弱类型语言,这意味着变量的类型可以在运行时改变。
  • 函数:函数是一段可重复使用的代码块,可以接受参数并返回一个值。在JavaScript中,函数可以作为一等公民,可以作为参数传递给其他函数,也可以作为变量存储。
  • 对象:对象是包含属性和方法的集合。属性是变量,方法则是函数。在JavaScript中,对象是使用花括号{}来创建的。
  • 事件:事件是用户与网页交互时发生的事情,如点击、鼠标移动、键盘输入等。JavaScript允许你定义事件处理程序,以便在事件发生时执行特定的代码。
  • DOM(文档对象模型):DOM是HTML和XML文档的编程接口,它提供了一种方式来访问和操作文档的结构。在JavaScript中,你可以使用DOM来动态地修改网页内容、结构和样式。
  • 异步编程:JavaScript是单线程的,这意味着它一次只能执行一个任务。为了提高性能并允许用户与网页交互,JavaScript使用异步编程模型,如回调函数、Promises和async/await。
  • 模块和模块化:在现代JavaScript开发中,模块是一种组织代码的方式。通过模块化,你可以将代码分解为独立的文件,每个文件都有一个特定的功能或任务。

JavaScript 是脚本语言
JavaScript 是一种轻量级的编程语言。
JavaScript 是可插入 HTML 页面的编程代码。
JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
JavaScript 是 web 开发人员必须学习的 3 门语言中的一门:HTML 定义了网页的内容,CSS 描述了网页的布局,JavaScript 控制了网页的行为。

五、热门文章

【温故而知新】JavaScript数字精度丢失问题
【温故而知新】JavaScript的继承方式有那些
【温故而知新】JavaScript中内存泄露有那几种
【温故而知新】JavaScript函数式编程
【温故而知新】JavaScript的防抖与节流
【温故而知新】JavaScript事件循环

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

·零落·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值