首页 > 其他分享 > JS 作用域和作用域链

JS 作用域和作用域链

时间:2022-08-20 18:11:05浏览次数:55  
标签:函数 作用域 age JS 查找 foo 变量

js的作用域是让我们访问变量和函数的区域,作用域规定了如何查找变量;

js有两种作用域:全局作用域,局部作用域;局部作用域又可分为函数作用域,块级作用域和其它具体的作用域

全局作用域

let age= 18
 
function foo() {
  // 不是嵌套函数
  // 函数内部可以访问函数外部变量
  return age
}
 
foo() // 18

函数作用域

function text() {
  var age = 18
}
 
// 函数外部访问不到函数内部变量
console.log(age) // undefined

块级作用域

{
  let age = 18
}
 
// let、const 关键字声明的变量,只在其所在的代码块 {} 内有效。
console.log(age) // error

静态作用域:函数声明的时候就已经确定

动态作用域:函数调用的时候确定

var value = 1
 
function foo() {
  console.log(value)
}
 
function bar() {
  var value = 2
  foo()
}
 
bar() // 1

js采用的是静态作用域,所以上述结果为1;因为foo的作用域在声明的时候就已确定,当调用foo时,它会先在自身作用域中查找,如果没有就会从它上一层中查找(这里foo的上一层就是全局作用域)因此结果为1

如果是动态作用域,那么上述结果则为2;此时foo的作用域是在它被调用的时候确定的,先在自身中查找,没有则在上一层中查找(这里的上一层就是bar中),因此结果为2

作用域链:

一般情况下,变量的取值应到创建这个变量的函数中取值,如果没有就往上一级查找,知道查找到全局作用域;这样一个查找过程就形成了作用域链

 

标签:函数,作用域,age,JS,查找,foo,变量
From: https://www.cnblogs.com/qianduan-Wu/p/16608317.html

相关文章

  • Java List转 JSONObject
    JavaList转JSONObjectpom.xml<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>......
  • JSON的概念和语法定义
    JSON的概念概念:JavaScriptObjectNotationJavaScript对象表示法json现在多用于存储和交换文本信息的语法进行数据的传输JSON比XML更小、更快,更易解析JSON是轻量......
  • js里面的三种注释方法
    https://www.cnblogs.com/rubylouvre/p/3649999.htmljavascript(js)语言里面的注释方法有三种。第一种是多行注释"/**/",一般js文件开头,介绍作者,函数等信息。/......
  • delphi基于结构的CRUD(JSON)
    delphi基于结构的CRUD(JSON)以采购订单为例。unitrest.tcgddtcgdd2;//代码由代码工厂自动生成//2022-08-2016:04:54{$Idef.inc}interfaceuses{$IFDEFfiredac......
  • JSON概念和JSON语法的定义与值的获取
    JSON概念概念: JavaScript Object NotationJavaScript对象标记法var p={"name":"张三","age":23,"gender":"男"}; json现在多用于存储和交换文本信息的语法......
  • FireDAC使用Mormot开发Rest服务器,返回JSON数据格式的问题
    FireDAC沿用了一贯的DataSnap的数据返回方式,这也使得开发出来的REST Server很给难给第三方应用提供服务用什么办法可以解决FireDAC直接序列返回的Json只是数据信息,而不是......
  • AJAX概念和AJAX实现_原生JS方式
    AJAX概念:概念:ASynchronousJavaScriptAndXML异步的JavaScript和XMLAJAX是一种在无需重新加载整个网页的情况下能够更新部分网页的技术。通过在后台于服务器进行少量......
  • webgl(threejs)生成房间楼层
    楔子在很多数字孪生项目中,都会涉及到楼层的建模。楼层的建模由于结构繁多,如果都是建模师进行手动建模,工作量会比较大。而楼层本身的结构,可以抽象成可以通过路径构造的对象......
  • js的闭包和promise
    闭包概述:闭包是一种书写代码一种结构,这种结构拥有的特性就是内部的空间在使用中不会被回收。(内部的变量以及对应的参数不会被gc回收)    函数嵌套函数(返回函数),内......
  • AJAX的概念以及原生JS方式
    AJAX的概念概念:ASynchronousJavaScriptAndXML异步的JavaScript和XML1.异步和同步:客户端和服务器端相互通信的基础上客户端必须等待服务器端的响......