首页 > 其他分享 >js函数作用域和作用域链

js函数作用域和作用域链

时间:2023-02-09 19:57:57浏览次数:34  
标签:块级 函数 作用域 js let var 变量

定义:作用域就是限制某个变量只能在某个区域内有效。全局变量拥有全局作用域,而局部变量拥有局部作用域。

在js中,作用域一共分为三类:全局作用域、局部(函数)作用域、块级作用域

 

 

3.块级作用域

 块级作用域是ES6新推出的概念,用let和const关键字声明变量。所有{}都会形成独立的块级作用域,例如if、for,注意对象的{}不包括在内。

在ES6中只要{ }没有和函数结合在一起,那么应该就是“块级作用域”。

在块级作用域中,var定义的变量是全局变量,let定义的变量是局部变量。

而在局部作用域也就是函数作用域中,无论是用var定义的变量还是用let定义的变量都是局部变量。

无论是在块级作用域还是局部作用域,省略变量前面的var或者let都会变成一个全局变量。

 

 4.作用域中的特殊情况

(1)函数参数——属于函数(局部)作用域

 (2)for循环

  a.使用var—全局作用域,外面也可以访问

  b.使用let—块级作用域,只能在{}范围内被访问,外面访问不到

(3)try...catch中的err—不属于任何作用域,只能被catch访问

4.作用域链

JavaScript上每一个函数执行时,会先在自己创建的AO上找对应属性值。若找不到则往父函数的AO上找,再找不到则再上一层的AO,直到找到大boss:window(全局作用域)。 而这一条形成的“AO链” 就是JavaScript中的作用域链。

函数运行时查找资源,是先查当前变量对象,查找不到就找该函数对象[[scope]]属性引用的变量对象,以此类推,一直向上找,直到全局对象,如果还查找不到,就爆出语法错误,记住作用域链上查找不到一个属性就爆语法错误。

标签:块级,函数,作用域,js,let,var,变量
From: https://www.cnblogs.com/131362wsc/p/17106822.html

相关文章

  • 箭头函数和普通函数的区别
    1.箭头函数不会创建自己的this(重要!!深入理解!!)箭头函数没有自己的this,它会捕获自己在定义时(注意,是定义时,不是调用时)所处的外层执行环境的this,并继承这个this值。所以,箭头函数......
  • 详述 application/json 和 application/x-www-form-urlencoded 区别
    HTTP协议是以ASCII码传输,建立在TCP/IP协议之上的应用层规范。规范把HTTP请求分为三个部分:状态行、请求头、消息主体。协议规定,POST提交的数据必须放在消息主体(ent......
  • js构造函数详解
    1.构造函数介绍构造函数是专门用来生成对象的函数,它提供模板,描述对象的基本结构。一个构造函数,可以生成多个对象,这些对象都有相同的结构。构造函数的写法就是一个普通的函......
  • 闭包函数的理解
    1.前言(为什么要搞这么一个东西出来,即必要性是什么):我们都知道,js的作用域分两种,全局和局部,基于我们所熟悉的作用域链相关知识,我们知道在js作用域环境中访问变量的权利是由内......
  • kx00003-顺序表--清空和销毁函数
    一、顺序表结构定义#defineINIT_SIZE10 //顺序表初始容量typedefvoid(myOpFunType)(void*); //定义操作函数类型typedefintseqType; //定义顺序表元素类......
  • 【Excel】IF条件函数公式怎么用?
    版本Excel2019步骤点击插入函数打开文档,点击公式菜单下的插入函数。 双击选择IF函数在函数列表双击选择IF函数。输入条件测试值在第一个输入框输入条件......
  • 用变量生成数据库web sql database 及操作需要JSON.stringfy/parse来操作
    用变量生成数据库web sql database 及操作需要JSON.stringfy/parse来操作:var newstr = 'checkbox0,input1,textarea2,option3,date4,flag'var newdatastr = ......
  • 【js】数组:filter函数
    前言:在使用filter的时候,永远返回的是一个“被筛选后的”新数组  1、定义 filter() 用于过滤某些元素,如果有if判断,if中往往返回的是true或false(布尔值)2、使用fil......
  • JSON.stringify()和JSON.parse()
    letdemo=['见到你',{age:18},'很开心']//1.利用JSON.stringify()将js对象序列化成JSON字符串console.lo......
  • 将二维数组作为函数参数
    今天本来正在写一个稀疏数组的代码,要写的内容很简单,创建一个11x11的数组,将其中两个位置分别赋值为1、2,其余位置为0。然后输出数组看一下是否赋值正确。正常是很简单的事情......