首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JAVASCRIPT FUNCTIONS 详解

而接下来我们把 obj 对象本身作为一个参数传递,因为函数和对象作为参数进行传递其传递的是对自身的引用(储存在堆上),所以局部作用域中对其属性值的任何更改都会立即反射到外层作用域中的 obj 对象... add 函数调用执行完毕后,当前的执行上下文会被销毁并回到 callAdd 的执行上下文中,callAdd 的执行上下文中的运行结果也是返回一个值,这通知解析器退出并销毁当前的执行上下文,重新回到全局执行上下文中...解析器看到 “localResult = a + b;” 这一行,它会在当前执行上下文环境的 variable 对象中检查是否存在一个 localResult 对象,因为现在存在这么一个变量,于是这个值...然而,解析器遇到 “globalResult = localResult;” 这一行代码,它不论在当前环境的 variable 对象中还是更上一级的执行上下文环境(对本例来说是全局执行上下文)的...因为当前执行上下文中的 variable 对象作用域链中处在更靠前的位置(相比全局执行上下文中的 variable 对象而言),所以 JavaScript 解析器会知道现在处理的应该是一个局部变量而非全局变量

65810

深入理解 JavaScript 中的作用域和上下

每个函数在被调用时都会创建一个新的作用域。 全局作用您开始文档中编写JavaScript,您已经全局作用域中了。全局作用域贯穿整个javascript文档。...全局作用域(scope)中上下文中始终是Window对象。(愚人码头注:取决于JavaScript 的宿主换环境,浏览器中全局作用域(scope)中上下文中始终是Window对象。...其余的任务执行期上下文中排队。正如我刚才所说, JavaScript 解释器开始执行代码上下文(作用域)默认设置为全局。...每个函数都会创建自己的执行期上下文。 一旦浏览器完成了该上下文中的代码,那么该上下文将从执行期上下文中销毁,并且执行期上下文中当前上下文的状态将被传送到父级上下文中。...但是,但是它不能向其父对象反向传递,意味着变量 likes 不能被其父对象访问。这也告诉我们,不同执行上下文中具有相同名称的变量从执行堆栈的顶部到底部获得优先级。

1.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

作用域与作用域链

一个方法或成员被声明,他就拥有当前的执行上下文context环境。在有具体值的context中,表达式是可见也都能够被引用。如果一个变量或者其他表达式不在当前作用域,则将无法使用。...作用域 JavaScript作用域为静态作用域static scope,也可以称为词法作用域lexical scope,其主要特征在于,函数作用域中遇到既不是参数也不是函数内部定义的局部变量,去函数定义上下文中查...而与之相对应的是动态作用域dynamic scope则不同,其函数作用域中遇到既不是参数也不是函数内部定义的局部变量,到函数调用时的上下文中去查。...,当我们s中使用ds中不存在d这个参数或者是局部变量,就会到[[Scopes]]中去查找,到Block作用查找到了,就获得了d的值,使用c、b、a,也是同理作用域链查找到localContext2...作用域、localContext作用域、Global作用域,总结来说,需要使用函数或者变量,如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这样一个查找过程形成的链条就叫做作用域链

1.9K20

Javascript中作用域的理解?

当你继续阅读这篇文章,你将会意识到你的代码的scope有助于提高效率,跟踪Bug。变量具有相同的名称但在不同的作用作用域也解决了命名问题。...我们也可以使用用函数的方法来改变上下文,稍后我们会讨论这方面的知识。全局作用域中上下文始终是Window对象。...其余的任务执行期上下文中排队。正如我刚才所说, JavaScript 解释器开始执行代码上下文(作用域)默认设置为全局。...每个函数都会创建自己的执行期上下文 一旦浏览器完成了该上下文中的代码,那么该上下文将从执行期上下文中销毁,并且执行期上下文中当前上下文的状态将被传送到父级上下文中。...但是,但是它不能向其父对象反向传递,意味着变量 likes 不能被其父对象访问。这也告诉我们,不同执行上下文中具有相同名称的变量从执行堆栈的顶部到底部获得优先级。

88930

javascript基础修炼(2)——Whats this(上)

小结一下: 代词,用于指代某个具体事物,结合上下,就可以知道其具体的指向。换句话说,有了上下,代词就有了具体的意义。...前面提到过上下文信息的意义在于让代词明确其指向,那么如果一段话的上下文中并没有使用代词,文中我们就不需要联系上下文就能理解这段话;同理,如果函数的函数体中并没有使用this关键字来指代任何对象,或者不需要关注其调用对象...函数实际功能的变化 从上面的示例中不难看出,开发中不使用this,需要开发者自行传入上下对象,并将其以参数的形式函数执行时传入,如果传入的invoker 对象和 this的指向一致,那么结果就一致...规则2——作为方法调用时,this指向上下对象文中我们看到函数的作用域链上是包含Object对象的,所以函数可以被当做对象来理解。...函数作为对象被赋值另一个对象的属性上,这个对象的属性值里会保存函数的地址,因为用函数作为赋值运算的右值是一个引用类型赋值。

42110

四、作用域与作用域链

词法环境,其实就是作用域,有的人叫词法作用域等等 得出结论: 一、JavaScript中,我们可以将作用域定义为一套规则,这套规则用来管理JS引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找...而环境记录对应的,其实就是变量对象,outer对应的,就是上文中出现过,但是没有引起重视的scopeChain。 作用域链 首先我们要明确的一点是,作用域和作用域链是不同的。 作用域是一套规则。...我们知道函数调用激活,会开始创建对应的执行上下文,执行上下文生成的过程中,变量对象作用域链,以及this的值会分别被确定。之前一篇文章我们详细说明了变量对象,而这里,我们将详细说明作用域链。...注意,因为变量对象执行上下文进入执行阶段,就变成了活动对象,这一点在上一篇文章中已经讲过,因此图中使用了AO来表示。...Active Object 作用域链是由一系列变量对象组成,我们可以在这个单向通道中,查询变量对象中的标识符,这样,就能访问到上一层作用域中的变量。

1.5K20

Python学习笔记:命名空间和作用

当我们赋值整数给变量,例如x = 1,我们告诉Python引用x,意味着Python指向整数类型对象1,以便对数值计算或其他方法使用值1。...Python命名空间的上下文中,“作用域”是与特定环境相关的名称集合。 ?...图5 模块作用域 内置命名空间作用域之下是模块作用域。模块作用域包括Python的执行模块或终端中在任何类或函数之外定义的所有名称。这是我们对象赋值给变量通常会考虑的命名空间: ?...图6 这意味着如果模块中定义的对象在外围作用域内不存在,则它们可以访问此命名空间: ? 图7 基于我们之前关于函数的讨论,这似乎违反常规。...注意,虽然我们在上面的例子中已经看到可以引用更高级别作用域中名称,但应该避免使用这种对象引用方法。因为变量可以在任何更高级别的作用域中找到,所以较小作用域内可能存在关于引用哪个变量的模糊性。

87440

深入理解JavaScript作用

我们 for 循环的头部直接定义了变量 i,通常是因为只想在 for 循环内部的上下文中使用 i,但是实际上 此时的 i 被绑定在外部作用域(函数或全局)中。...如果作用域链上没有任何一个对象包含属性 x, 那么就认为这段代码的作用域链上不存在 x, 并最终抛出一个引用错误 (Reference Error) 异常。 下面作用域中有三个嵌套的作用域。...作用域会在查找都第一个匹配的标识符就停止。 多层的嵌套作用域中可以定义同名的标识符,这叫”遮蔽效应“。...JavaScript的执行分为:解释和执行两个阶段 解释阶段 词法分析 语法分析 作用域规则确定 执行阶段 创建执行上下文 执行函数代码 垃圾回收 作用函数定义就已经确定了,而不是函数调用时确定...查找变量的时候会先从内部的作用域开始查找,如果没找到,就往上一级进行查找,依次类推。 作用函数定义就已经确定了,执行上下文是函数执行之前创建的。

68330

JavaScript中的this指向问题

this 的值可以是以下几种情况之一: 全局上下文中的 this:全局作用域中(即在任何函数之外)使用 this,它将指向全局对象浏览器环境中是 window 对象)。...这种默认绑定可以全局作用域和独立函数调用中发生。 全局作用域中,this的默认绑定指向全局对象。...所以,全局作用域和独立函数调用中,如果没有明确指定this的值,this将会默认绑定到全局对象。...箭头函数中的this 箭头函数中的this是如何工作的: 箭头函数中,this的值是函数定义确定的,而不是函数调用时确定的。箭头函数会捕获其所在上下文中的this值,并在函数体内部使用。...换句话说,箭头函数的this是词法作用上下文中的this,而不是动态绑定的。

19960

Spring的所有注解都在这,别再说没见过不会用了

标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入 ModelMap 中,便于 View 层使用.我们在上面的类中加入一个方法如下。 ?...可用用于方法或者类中,标记在一个方法上表示该方法是支持缓存的,标记在一个类上则表示该类所有的方法都是支持缓存的。 参数列表: ?...2、如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常。...3、如果指定了 type,则从上下文中找到类型匹配的唯一 bean 进行装配,找不到或者找到多个,都会抛出异常。...@PostConstruct 用来标记是项目启动的时候执行这个方法。用来修饰一个非静态的 void() 方法也就是 Spring 容器启动就执行,多用于一些全局配置、数据字典之类的加载。

55010

Spring 中的 18 个注解,你会几个?

标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入 ModelMap 中,便于 View 层使用。 我们在上面的类中加入一个方法如下: ?...可用用于方法或者类中,标记在一个方法上表示该方法是支持缓存的,标记在一个类上则表示该类所有的方法都是支持缓存的。 参数列表 ?...2、如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常。...3、如果指定了 type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。...@PostConstruct 用来标记是项目启动的时候执行这个方法,用来修饰一个非静态的 void() 方法。 也就是 Spring 容器启动就执行,多用于一些全局配置、数据字典之类的加载。

34930

Spring 中的 18 个注解,你会几个?

标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用.我们在上面的类中加入一个方法如下 ?...可用用于方法或者类中,标记在一个方法上表示该方法是支持缓存的,标记在一个类上则表示该类所有的方法都是支持缓存的。 参数列表 ?...@Resource装配顺序: 1、如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常 2、如果指定了name,则从上下文中查找名称(id)匹配的bean...组件不好归类的时候,我们可以使用这个注解进行标注 @Scope 用来配置 spring bean 的作用域,它标识 bean 的作用域。...而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中 参数: 1、names:这是一个字符串数组。里面应写需要存储到session中数据的名称

38360

Spring中的18个注解,你会几个?

标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用.我们在上面的类中加入一个方法如下 ?...可用用于方法或者类中,标记在一个方法上表示该方法是支持缓存的,标记在一个类上则表示该类所有的方法都是支持缓存的。 参数列表 ?...@Resource装配顺序: 1、如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常 2、如果指定了name,则从上下文中查找名称(id)匹配的bean...方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配; @PostConstruct 用来标记是项目启动的时候执行这个方法。...而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中 参数: 1、names:这是一个字符串数组。里面应写需要存储到session中数据的名称

46721

解析.NET对象的跨应用程序域访问(上篇)

本文主要讲解对象应用程序域中的传递。主要讲解应用程序域的一些核心对象,对于应用程序域的操作出现的比较少,所以在这里给出的是程序集的一些基本操作。如有不足之处,还望多多指正。...(2).GetData():为指定名称获取存储在当前应用程序域中的值。...该方法接收一个string参数,预定义应用程序域属性的名称,或已定义的应用程序域属性的名称。返回一个属性的值,或 null(如果属性不存在)。...friendlyName:此友好名称可在用户界面中显示以标识域;securityInfo:确定代码标识的证据,该代码应用程序域中运行。传递 null 以使用当前应用程序域的证据。...您以这种方式加载程序集,不会有任何DLL文件的锁定。

95450

看完这几道 JavaScript 面试题,让你与考官对答如流(上)

如果变量在当前作用域中不存在,它将向外部作用域中查找并搜索,如果该变量不存在,它将再次查找直到到达全局作用域,如果找到,则可以使用它,否则引发错误,这种查找过程也称为作用域链。...方法中我们返回this.name,在此上下文中,this指向的是carDetails对象,该对象当前是执行函数的“所有者”对象。...这样做的原因是getCarName方法有一个不同的“所有者”对象,即window对象全局作用域中使用var关键字声明变量会在window对象中附加与变量名称相同的属性。...请记住,没有使用“use strict”全局作用域中this指的是window对象。...对象不存在属性,它将查看其原型,如果仍然不存在,则将其查找到原型的原型,依此类推,直到原型链中找到具有相同属性的属性为止。 原型链的末尾是Object.prototype。

2K10

JS 到底是干嘛:一文搞懂JS 执行上下

这些阶段是: 创建变量对象(VO) 创建作用域链 为变量赋值 创建阶段:创建变量对象(VO) 变量对象(VO)是一个执行上下文中创建的类对象容器。它存储了执行上下文中定义的变量和函数声明。...js console.log(名称);let name = "Victor";将抛出错误: 创建阶段:创建作用域链 创建了变量对象(VO)之后,就开始创建作用域链,作为执行上下文创建阶段的下一个阶段...然而,由于词法作用域,它可以访问它所在函数的作用域及其父函数的作用域。 在运行代码,JS引擎不会在second()函数的作用域中找到变量b。因此,它查找父函数的作用域,从first()函数开始。...JavaScript引擎定义函数的执行上下文中遍历作用域,以解析其中调用的变量和函数,这种做法称为作用域链。 只有当JS引擎无法解析范围链中的变量,它才会停止执行并抛出错误。...最后,整个代码的执行完成,JS引擎将GEC从当前堆栈中移除。 如果看到这,你有些晕,可以再回顾一下。

26510

【随手记】数据类型

作用域与闭包 对闭包的理解 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。...作用域链 在当前作用域中查找所需变量,但是该作用域没有这个变量,那这个变量就是自由变量。...变量对象是一个包含了执行环境中所有变量和函数的对象作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(也就是全局对象)始终是作用域链的最后一个对象。...查找一个变量,如果当前执行环境中没有找到,可以沿着作用域链向后查找。...first() ③ 创建执行上下文 创建执行上下文有两个阶段:创建阶段和执行阶段 1)创建阶段 (1)this绑定 全局执行上下文中,this指向全局对象(window对象函数执行上下文中,this

38220

16个Spring注解,你知道的有几个?

(2) 没返回的方法上: 需要手动model.add方法 ? 我们在当前类下建一个请求方法: ?...标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用.我们在上面的类中加入一个方法如下 ?...可用用于方法或者类中,标记在一个方法上表示该方法是支持缓存的,标记在一个类上则表示该类所有的方法都是支持缓存的。 参数列表 ?...@Resource装配顺序: 1、如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常 2、如果指定了name,则从上下文中查找名称(id)匹配的bean...而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中 参数: 1、names:这是一个字符串数组。里面应写需要存储到session中数据的名称

51840

16个Spring注解,你知道的有几个?

标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用.我们在上面的类中加入一个方法如下 浏览器中输入访问地址并且加上参数...可用用于方法或者类中,标记在一个方法上表示该方法是支持缓存的,标记在一个类上则表示该类所有的方法都是支持缓存的。...@CacheEvict(value=”UserCache”) 参数列表 @Resource装配顺序: 1、如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常...2、如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 3、如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常...而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中 参数: 1、names:这是一个字符串数组。里面应写需要存储到session中数据的名称

38300
领券