美文网首页
关于JS的作用域链和引用类型

关于JS的作用域链和引用类型

作者: 湾里晴空 | 来源:发表于2018-05-07 15:29 被阅读0次

JS的作用域链

  • 在一般情况下我们在最外层声明的变量作用域是全局作用域,全局作用域指的是在当前windows下面的一个。但是当有函数出现的时候,函数内部的作用域会脱离全局作用域,我们称之为局部作用域。
  • 局部作用域中元素的调用我们遵循以下原则: 当我们需要寻找相关元素的值时,我们首先在函数内部的局部作用域中找,找不到时进入函数的上层作用域去寻找。那什么是函数的上层作用域呢?上层作用域的定义就是该函数声明的那个区域,在哪里声明就在哪里寻找。

关于引用类型

  • 元素的类型分为基本类型(数值类型,字符串类型,布尔类型,null,undefined)和引用类型(函数,数组,对象,正则)
  • 对于基本类型,其直接就是保存在栈内存中的;
  • 对于引用类型,是保存在堆内存中的对象,变量中只是储存其地址的指针。


    image.png
  • 输出结果为1 {name:'jirengu' , age:2}
    原因: f1(a)是将a的值赋给局部变量n ,然后对n再作运算,所以真实是对a没有影响。最后输出结果为a为1;f2(c)是将该对象的地址赋给obj,然后对obj.age进行操作实际上就是对堆中的内存进行操作,直接更改内存中的值,所以对象的age的值发生变化,此时对象中的age变成3;最后f1(c.age)是将内存堆总的值2赋给n,然后发生变化的只是局部变量n,内存堆中数据没有发生变化。
  • 对于对象中变量有后缀的,诸如 obj.age等都可以认为是直接调用堆内存中的信息。


    image.png
  • 对于红线处,在函数中,可以不用return直接修改堆内存中的信息,然后调用时已经修改。

相关文章

  • 关于JS的作用域链和引用类型

    JS的作用域链 在一般情况下我们在最外层声明的变量作用域是全局作用域,全局作用域指的是在当前windows下面的一...

  • JS作用域链 & JS引用类型

    立即执行函数表达式是什么?有什么作用? 在 Javascript 中,圆括号()是一种运算符,跟在函数名之后,表示...

  • JS回顾变量、作用域、内存问题

    基本类型和引用类型的值属性的动态复制变量值传递参数检测类型 执行环境与作用域延长作用域链没有块级作用域声明变量提升...

  • 浅谈JS作用域链

    浅谈JS作用域链 作用域 作用域(scope)就是变量访问规则的有效范围。作用域外,无法引用作用域内的变量;离开作...

  • 前端JS基础一(基础知识)

    基础知识 js基础三座大山 原型 原型链 作用域 闭包 异步 单线程 知识点 1.变量类型:值类型和引用类型(指针...

  • js基础

    js三座大山:原型和原型链 作用域和闭包 异步和单线程引用类型:对象 数组 函数 因为指针引用的是一个空间 所以叫...

  • JS作用域链&引用类型

    一、立即执行函数表达式是什么?有什么作用? 上面这种写法就是立即执行函数表达式。以圆括号开头,js就会认为这是一个...

  • 作用域链&引用类型

    作用域链&引用类型 执行环境与引用类型是JavaScript中的重要概念。 执行环境(execution cont...

  • 作用域与作用域链

    了解作用域和作用域链需要了解一下知识: - 基础数据类型和引用数据类型 - 内存空间 - 垃圾回收机制 - 执行上...

  • 3小时速学JS原理

    内容:前端JS部分知识点原理速讲,内容包括且不限于 声明前置 引用类型 函数作用域链 闭包 跨域 面向对象 继承 ...

网友评论

      本文标题:关于JS的作用域链和引用类型

      本文链接:https://www.haomeiwen.com/subject/wgxvrftx.html