美文网首页
关于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的作用域链和引用类型

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