美文网首页
作用域链&引用类型

作用域链&引用类型

作者: 一条没有梦想的老咸鱼 | 来源:发表于2018-08-31 14:10 被阅读0次

作用域链&引用类型

执行环境与引用类型是JavaScript中的重要概念。

执行环境(execution context)

执行环境定义了变量和函数是否有权访问其它的数据,决定了他们各自的行为。全局执行环境是最外围的一个执行环境,在web浏览器中,全局执行环境被认为是widow对象。
每个函数都有其自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而且在函数执行之后,栈将起环境弹出,把控制权返还给之前的执行环境。

作用域链(scope chain)

作用域链的作用是保证对执行环境有权访问所有变量和函数的有序访问。如果这个作用域是函数,就存在一个arguments对象(这个对象全局环境是不存在的)。

var color = "blue";
function changColor(){
  if(color === "blue"){
      color = "red";
    }else{
      color = "blue" ; 
    }
}
changeClor();
console.log("color is now" + color)

在这个简单的例子中,changColor沿着作用域链获取的到了 color这个变量。

var color = "blue";
function changeColor(){
  var anotherColor ="red";
  function swapColor(){
   var tempColor = anothercolor;
    anotherColor = color;
    color = tempColor;
    //这里能访问:color、anotherColor、tempColor 
 }
//这里也能访问到color、anotherColor,但不能访问tempColor;
}
//这里只能访问到color;
cangeColor();


从上面的例子中 我们得出一个结论,任何环境都不能通过向下搜索作用域链来进行访问,但是由下向上却可以。

引用类型

基本类型、引用类型

  • 基本类型值(数值、布尔值、字符串、null、undefined):指的是保存在栈内存中的简单数据段。
  • 引用类型(对象、数组、函数、正则):指的是那些保存在堆内存中的对象,变量保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象。

基本类型是按值传递

var a = 4;
function fn(n){
    n++
}
fn(a);
console.log(a);//最后的输出结果为4,并没有改变。
/*
function fn(n){
    var n = arguments[0];
    n++;
    实际上并没有对a做任何改变;
    }
*/

引用类型是按引用传递

var o ={
    n: 10;
}
function fn(obj){
    obj.n++;
}
fn(o);
console.log(o.n);//结果为11;
/*
function fn(obj){
    var obj = arguments[0]; 这个临时变量被赋予的值,实际上是对象指针他直接指向堆内存里面的对象。  
    obj.n++ 他与外面的 o同时指向同一个变量,所以堆内存里面的数据也被更改。
    
}

*/

相关文章

  • 作用域链&引用类型

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

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

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

  • 作用域链&引用类型

    1、立即执行函数表达式是什么?有什么作用? (function(){函数体})()即为立即执行函数,就是将一个匿名...

  • 作用域与作用域链

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

  • 浅谈JS作用域链

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

  • JS作用域链&引用类型

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

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

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

  • 3小时速学JS原理

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

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

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

  • 理解Javascript的作用域和作用域链

    前言 本文2771字,阅读大约需要8分钟。 总括: 本文讲解了Javascript的作用域,作用域类型,作用域链...

网友评论

      本文标题:作用域链&引用类型

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