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

为什么覆盖object参数不会将新引用传递给外部作用域?

覆盖object参数不会将新引用传递给外部作用域的原因是因为在函数调用时,参数传递是按值传递的。当我们将一个对象作为参数传递给函数时,实际上是将对象的引用(内存地址)作为值传递给了函数。

在函数内部,如果我们对传入的对象进行修改,实际上是通过引用来修改对象的属性或者方法。这样的修改会影响到原始对象,因为它们引用的是同一个对象。

然而,如果我们在函数内部重新给传入的对象参数赋予一个新的对象,这个新对象的引用将会覆盖原始对象的引用。但是这个覆盖只是在函数内部有效,不会影响到外部作用域中的原始对象。

这是因为在函数内部,我们改变了参数的引用,使其指向了一个新的对象,但是外部作用域中的引用仍然指向原始对象。所以,外部作用域中的引用不会受到函数内部的修改的影响。

这种行为是为了保护外部作用域中的对象不受函数内部的修改影响,同时也是为了避免不必要的内存消耗和性能损失。

总结起来,覆盖object参数不会将新引用传递给外部作用域是因为函数参数传递是按值传递的,当我们在函数内部重新给参数赋予一个新的对象时,只是改变了参数的引用,不会影响外部作用域中的原始对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

javascript中function用法_年终总结反思不足之处

之所以能够访问外部作用的变量,是因为内部函数的作用链中包含外部作用。...在另一个函数内部定义的函数会将包含函数(外部函数)的活动对象添加到它的作用链里,当外部函数执行完后其活动对象不会被销毁,因为匿名函数的作用链仍然在引用这个活动对象。...所以现在需要的就是通过某种方式去执行函数的操作把i的值当实参进去,简单!在匿名函数外部加一层立即执行的匿名函数(这也增加了一层作用了)。...为什么匿名函数没有取得其包含作用外部作用)的 this 对象呢?...但 new 构造实例的步骤是:先创建实例对象;再在该实例上调用 Person 函数初始化作用作用链 this 等;再添加属性等。

46410

2022年最新Python大数据之Python基础【九】面向对象与继承

# 在实例化对象时,类名(参数1, 参数2....)这些参数会传递给init方法,进行使用 # class Person(object): # def __init__(self, name,...class Person(object): def __init__(self, name, age): # self.属性名 = 参数 将函数外部传递进来的参数赋值给对象,创建实例属性...str(对象) # 2.隐式类型转换 %s 作为占位符,接收p1 print打印 5、__del__()方法 对象被释放前,自动执行__del__()方法 释放对象的几个场景 出了函数作用后...p3 = Person('xiaoming', 15) global p4 p4 = p3 print(p3) func() # 上述代码可以推断,在函数执行完成后,出了作用...,会将函数内所有的临时变量释放掉,除非其被外部变量引用 print('程序结束') # 切断引用或释放对象的几个场景 # 1.出了函数作用会自动释放函数内的局部变量 # 2.程序结束会自动释放所有的变量

29110

javascript冷知识

obj1改变了,obj2也跟着改变   函数参也是一样,基本类型就等于创建个值,引用类型就会指向同一个对象,但是是按值传递,只不过只是指向的地址相同,如果在函数里面让他等于一个对象的话,那么外面的不会受到影响...,第一个是运行这个函数的对象(作用),第二个是一个参数数组(也可以是一个arguments对象),指的是这个函数运行所需要的参数   function sum(num1, num2) {     return...,这个时候this是window对象   call 和apply的作用是相同的,第一个参数是一样的,不同的是,参数是直接传递给函数,这个时候test的代码应该改为   return sum.call(this...他的作用在于,我们可以扩展他的作用。...原因:在闭包中,由于匿名函数调用了sayName里的变量,将它的变量加到自己的作用内,所以如果它存在的话,sayName的变量就不会消失.我们可以通过将s=null来解除对匿名函数的引用,以此来释放内存

54830

爬虫不得不学之 JavaScript 函数对象篇

JavaScript 中 词法作用的规则为: 函数内部的变量允许访问函数外部的。 整个代码结构只能函数限定作用,这就是为什么上文说使用自调用函数来开辟作用的原因了。...下面再看看 JavaScript 中三种作用 全局作用:JavaScript 中认为在函数外部定义的变量就是全局变量,而这个全局变量所在的作用就是全局作用。...作用链 只有函数才可以限定作用,那么在要有代码,这里就至少存在一个全局作用,而写代码难免又会有函数,这里的函数就会构成另一个作用,如果函数中还有函数,则他还会构成一个作用,等等。...变量提升:变量的声明会被提升到作用的最上面,注不会将赋值提升。 函数提升:把当前作用的函数声明提升到当前作用的最上面。 如果你懂了再看看下面几段代码会不会报错? 1. ?...使用 new Object() 创建 ? 这个是先创建一个空对象,然后动态增加对象的属性和方法,也是只适合创建只有一个对象的类型,还不如第一种,也推荐。 使用工厂模式创建 ?

60630

前端相关片段整理——持续更新

ES6 Object.assign 将源对象(source)的所有可枚举属性,复制到目标对象(target) Object.assign(target, source1, source2); 后面属性覆盖前面同名属性...() 两种特殊状态的处理函数: componentWillReceiveProps(object nextProps):已加载组件收到参数时调用 shouldComponentUpdate(object...闭包 特点: 函数 能访问另外一个函数作用域中的变量 ES 6之前,Javascript只有函数作用的概念,没有块级作用。即外部是访问不到函数作用域中的变量。...总结 可以访问外部函数作用域中变量的函数 被内部函数访问的外部函数的变量可以保存在外部函数作用内而不被回收---这是核心,后面我们遇到闭包都要想到,我们要重点关注被闭包引用的这个变量 4.3....作用为什么闭包就能访问外部函数的变量呢 Javascript中有一个执行环境(execution context)的概念,它定义了变量或函数有权访问的其它数据,决定了他们各自的行为。

1.4K10

「查缺补漏」JavaScript执行上下文-执行栈

初始化作用链 创建 arguments object 检查上下文中的参数,初始化名称和值并创建引用副本 扫描上下文找到所有函数声明: 扫描上下文找到所有var的变量声明: 确定 this 值 进入执行上下文的执行阶段...「arguments」 对象(此对象存储索引和参数的映射)和传递给函数的参数的 「length」。...(负责处理 var 定义的变量,初始值为 undefined 造成声明提升) 创建 「外部环境引用」,值为全局对象,或者为父级词法环境(作用) 创建 「声明式环境记录器」 ,存储变量、函数和参数,它包含了一个传递给函数的...(负责处理 let 和 const 定义的变量) 创建 「外部环境引用」,值为全局对象,或者为父级词法环境(作用) 创建函数上下文的「词法环境」 创建函数上下文的「变量环境」 确定 this 值 进入函数执行上下文的执行阶段...你应该明白为什么会存在变量提升,函数提升,而let const没有。 ES3之前的变量对象与活动对象的概念在ES5之后由词法环境,变量环境来解释,两者概念冲突,后者理解更为通俗易懂。

55950

前端vue面试题2021_vue框架面试题

地址栏显示,刷新丢失,类似get params 地址栏不显示,隐藏传参,刷新丢失类似post /:id 动态参,刷新丢失同query 29.ES6 Promise 用法,以及使用场景?...(必背) 答: 函数嵌套函数,函数内部可以访问外部变量,外部不能直接访问该变量闭包保存了自己的私有变量,通过提供的接口给外部使用 延申了作用范围 43.改变this 指向的方式(必背) 答: call(...) 引用数据类型:object、array、function(统称为object) 45.组件中 data 为什么是一个函数?...(必背) 作用:变量起作用的范围 变量访问会层层往上级作用访问直到window,称为作用链 变量提升:JS编译阶段会将文件中所有var,function声明的变量提升到当前作用最顶端 50.为什么构造函数的方法要放在...prototype里边为什么直接用this.的方式声明?

1.8K40

前端面试题---JS部分

语法:Object.freeze(obj) 参数:obj:要冻结的对象。返回值:传递给函数的对象。...9、slice( ):数组元素的截取,返回一个数组,数组是截取的元素,可以为负值。从数组中截取,如果参,会返回原数组。...2.执行完后,函数执行上下文会被销毁,函数对“闭包”对象的引用也会被销毁,但其内部函数还持用该“闭包”的引用, 所以内部函数可以继续使用“外部函数”中的变量 利用了函数作用链的特性,...一个函数内部定义的函数会将包含外部函数的活动对象添加到它的作用链中,函数执行完毕,其执行作用链销毁, 但因内部函数的作用链仍然在引用这个活动对象,所以其活动对象不会被销毁,直到内部函数被烧毁后才被销毁...2、DOM:当原有的DOM被移除时,子结点引用没有被移除则无法回收 3、Times计时器泄露 作用 1、作用 作用就是一个变量可以使用的范围,主要分为全局作用和函数作用 全局作用就是Js中最外层的作用

72220

你不知道的javascript—作用、闭包「建议收藏」

后者本质上是通过将一个对象的引用当作作用来处理,将对象的属性当作作 用域中的标识符来处理,从而创建了一个的词法作用(同样是在运行时)。...3.全局变量唯一性,var 声明的变量i在循环中被不断覆盖最终只是唯一的10,因此在外部调用中无论调用a数组的哪一个,最终都是10。 4.局部使用 let 定义时只在该函数作用内部有效。...1.1特性: 1.它有自己的局部作用(local scope); 2.它可以访问外部函数的作用(outer scope),参数(parameters),而不是参数对象; 3.它也可以访问全局的(global...scope) 4.参数和变量不会被垃圾回收机制回收(不当的使用闭包可能造成内存泄漏的原因) 2、闭包工作原理 1.闭包存储外部函数变量的引用,因此总是可以访问外部变量的更新值 2.在它的外部函数被执行并返回值后...bar() 依然持有对该作用引用,而这个引用就叫作闭包。 闭包比较关键的地方在于函数A执行完毕后,函数里的变量或参数并没有被回收而被其他函数B(常见的情况就是B在A内声明或定义)引用着。

45820

JavaScript中的this指向哪?

不同于词法作用链,this的指向是在运行时才能确定,实际上当执行上下文创建后,会生成一个this引用值,指向当前执行上下文对象,如下图所示:因此为了避免这种情况,JavaScript 设计者引入了 this... 表示参数数组功能: 没有返回值, 立即调用函数apply 和 call 的区别在于参,call 的是一系列参数,apply 的是参数数组var test = {}function test2(...,并将this重新指向对象//覆盖了testFun原来绑定的testobj对象var instance = new testFun();console.log(instance.name) //undefined...箭头函数具有词法作用,其 this 值在定义时就已经确定,并继承外部作用绑定 this 的对象普通函数中 this 可以通过函数的调用方式(如对象方法、构造函数、函数调用等)来绑定到不同的对象,而箭头函数没有自己的...this 绑定;箭头函数没有自己的 this 绑定,它只能继承外部作用的 this 值,无法在运行时改变绑定对象,而且也无法通过显式绑定来改变 this 的指向。

13210

夯实JS系列--变量、作用和内存问题

这段代码说明两点: 引用类型在参的时候,是按照引用传递的,不然不可能person.name为Neal 即使在函数内部修改了参数的值。原始的引用依然不变。...作用链的前端,始终是当前执行的代码所在的 环境的变量对象。全局执行环境始终是作用链的最后一个对象。 标识符的解析也就是沿着作用链一级一级的搜索的过程。...antherColor } //这里只能访问anotherColor color swapColors(); }changeColor();//这里只能访问color 所以从上面代码我们可以感受到:内部环境可以通过作用链访问到外部环境的变量...try-catch 语句中的catch with语句 对于width语句而言,会将指定的对象添加到作用链中。对于catch语句而言,会创建一个的变量对象,其中包含被抛出的错误对象的申明。...为什么不常用呢?看着也很清晰啊!

71720

前端常见20道高频面试题深入解析

浅拷贝 浅拷贝是会将对象的每个属性进行依次复制,但是当对象的属性值是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化。...函数柯里化的主要作用参数复用 提前返回 – 返回接受余下的参数且返回结果的函数 延迟执行 – 返回函数,等待执行 6....这个方法接收两个参数:一个用作对象原型的对象和(可选的)一个为对象定义额外属性的对象(可以覆盖原型对象上的同名属性),在传入一个参数的情况下, Object.create() 和 object()...( with 和 eval 能够修改词法作用,但是推荐使用,对此不做特别说明) 作用分为: 全局作用 函数作用 块级作用 JS执行上下文栈(后面简称执行栈) 执行栈,也叫做调用栈,具有 LIFO...私有化变量 模拟块级作用 创建模块 模块模式具有两个必备的条件(来自《你不知道的JavaScript》) 必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个的模块实例) 封闭函数必须返回至少一个内部函数

1.2K30

python函数基础学习

参的角度上,调用函数是参数有两种方式: 按照位置参数 按关键字参数 用法:1-位置参数必须在关键字参数的前面 2-对于一个参数只能赋值一次 3- 默认参数: 用法:为什么要用默认参数?...将变化比较小的值设置成默认参数 定义:默认参数可以的时候用的就是默认值,如果覆盖默认值 默认的值是在定义函数的时候就已经确定了 3- 动态参数: 按位置值多余的参数都会有args统一接收...:从上到下加载) -> >局部命名空间(运行中:调用才加载)< 取 值 : 在局部调用:局部命名空间->全局命名空间->内置命名空间 在全局调用:全局命名空间->内置命名空间 作用为什么要有作用的概念...: 为了函数内的变量不会影响到全局 作用就是作用范围,按照生效范围可以分为全局作用和局部作用 全局作用:包含内置名称空间,全局名称空间,在整个文件的任意位置都能被引用,全 局有效 局部作用:局部名称空间...3- 可以当作函数的参数和返回值(可以当做普通变量使用) 四、闭包 内部函数包含对外部作用而非全局作用名字的引用

52820

从 JavaScript 作用说开去

覆盖作用 如果在一个作用域中声明了一个与外层作用同名的变量,那么这个内部作用以及内部的所有作用域中将会访问不到外面的变量。...当传递的是字符串参数时,setTimeout、setInterval 会像 eval 那样去处理。同样也需要避免使用这两个函数的时候使用字符串参数。...函数每调用一次,就需要给它的参数和变量准备的存储空间,就会创建一个的环境将(变量和参数的)标识符合变量做映射。对于递归的情况,执行上下文,即通过环境的引用是在栈中进行管理的。...因此在 JavaScript 中存在一个作用链,它以当前作用为起点,连接了外部作用,每个作用链最终会在全局环境里终结。全局作用外部作用指向了null。...函数 myFunc 通过 [[ Scope]] 连接着它的作用,全局作用。 当程序运行到标志 2 的时候,JavaScript 会创建一个作用用来管理参数和本地变量。 ?

83830

前端基础知识整理汇总(上)

如果函数名的属性已经存在,那么该属性将会被引用覆盖。 检查当前上下文中的变量声明,每找到一个变量声明,就在变量对象中以变量名建立一个属性,属性值为undefined。...然后使用arguments和其他命名参数的值来初始化函数的活动对象。但在作用链中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位...直至作为作用链终点的全局执行环境。...具体的有:变量作用(和 作用链条,闭包里面来自外部作用的变量),函数参数,以及 this 对象的值。...apply(thisObj, argArray)接收两个参数,thisObj是函数运行的作用(this),argArray是参数数组,数组的每一项是你希望传递给函数的参数。...纯函数也可以被看作成值并用作数据使用 从常量和变量中引用它。 将其作为参数递给其他函数。 作为其他函数的结果返回它。 其思想是将函数视为值,并将函数作为数据传递。

1.2K10

说说js变量、作用和垃圾回收

如果从一个变量向另一个变量复制基本类型的值,会将值复制到为变量分配的位置上:var num1 = 5;var num2 = num1;当使用 num1 的值来初始化 num2 时,num2 中也保存了值...ECMAScript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。...其中,内部环境可以通过作用链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。 这些环境之间的联系是线性的、有次序的。...这两个语句都会在作用链的前端添加一个变量对象。对 with 语句来说,会将指定的对象添加到作用链中;对于 catch 语句来说,会创建一个的变量对象,其中包含的是被抛出的错误对象的声明。...搜索过程从作用的前端开始,向上逐级查找,如果存在一个局部的变量的定义,则停止搜索,即同名局部变量将覆盖同名全局变量:var color = 'blue';function getColor() {

56130

python中函数嵌套、函数作为变量以及闭包的原理

也就是说我们可以在函数里面定义函数,而且现有的作用和变量生存周期依旧不变。...理解:在inner函数中,python解析器需要找一个叫name的本地变量,查找失败后会继续在上层的作用里面寻找,这个上层作用定义在outer函数里,python函数可以访问封闭作用。...也就是说你可以把函数像参数一样传递给其他的函数或者说从函数了里面返回函数return内层函数时不加括号,只返回函数的地址:代码:#encoding=utf-8def outer(): name="...为什么能调用呢?通过上面变量的作用和生存周期我们不难明白,name是函数outer里的一个局部变量,也就是说只有当outer正在运行时,该变量才会存在。...如果一个函数定义在另一个函数的作用内,并且引用了外层函数的变量,则该函数称为闭包。

4.8K11

细说js变量、作用和垃圾回收

如果从一个变量向另一个变量复制基本类型的值,会将值复制到为变量分配的位置上:var num1 = 5;var num2 = num1;当使用 num1 的值来初始化 num2 时,num2 中也保存了值...ECMAScript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。...其中,内部环境可以通过作用链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。 这些环境之间的联系是线性的、有次序的。...这两个语句都会在作用链的前端添加一个变量对象。对 with 语句来说,会将指定的对象添加到作用链中;对于 catch 语句来说,会创建一个的变量对象,其中包含的是被抛出的错误对象的声明。...搜索过程从作用的前端开始,向上逐级查找,如果存在一个局部的变量的定义,则停止搜索,即同名局部变量将覆盖同名全局变量:var color = 'blue';function getColor() {

56420
领券