美文网首页
浅聊js运行机制

浅聊js运行机制

作者: 路上灵魂的自由者 | 来源:发表于2019-01-06 17:31 被阅读1次

// 浅聊js的运行机制(堆栈内存和不同的数据类型的操作方式)

var a = 12;

var b = a;

b = 13;

console.log(a); // 12

var obj1 = { n:100 };

var obj2 =  obj1;

obj2['n'] = 200;

console.log(obj1.n)  // 200

/*

* 浅分析js的运行机制

* 1. 浏览器(它的内核/引擎)渲染和解析js的时候,会提供一个js代码运行的环境,我们把这个环境称之为“全局作用域(global/window(客户端) scope)”

* 2. 代码自上而下执行(在此之前还有一个变量提升阶段)

    => 基本数据类型的值会存储在当前作用域下(按值操作)

        var a = 12;

        1).先在当前作用域下开辟一个空间存储12(栈内存)

        2).在当前作用域中声明一个变量a (var a)(变量没有意思)

        3).让声明的变量和存储的12关联(把存储的12的赋值给a => 赋值操作叫做定义)

      基本类型(也叫做值类型),是按照值来操作的,把原有的值复制一份放到新的空间位置上,和原来的值没有关系(为了让两个位置和空间没有关系),一个变量只能跟一个值关联

        => 引用数据类型的值不能直接存储到当前的作用域下(因为可能存储的内容过于复杂),我们需要先开辟一个新的空间(理解为仓库),把内容存储到这个空间中(按地址操作)(堆内存)

        var obj1 = { n: 100 }

            1). 首先开辟一个新的内存空间,把对象中的键值对依次存储起来(为了保证后面可以找到这个空间,此空间有一个16进制的地址)

            2). 声明一个变量

            3). 让变量和空间地址关联在一起(把空间地址赋值给变量)

        引用类型不是按值来操作,他操作的空间的引用地址:把原来空间的地址赋值给新的变量,但是原来的空间没有被克隆,还是一个空间,这样就会出现多个变量关联的是相同的空间,相互之间就会存在影响了

栈内存和堆内存

栈内存(作用域): ==>(值类型)

    栈内存提供js代码运行的环境

    代码都在栈内存中进行执行

    所有的值类型都会在栈内存中开辟一个位置进行存储

堆内存: ==> (引用类型)

    用来存储引用类型的信息的值

    对象存储的是键值对

    函数存储的是代码字符串

*/

堆栈内存练习

案例一:

var obj = {

    n: 10,

    m: obj.n * 10  //Can  not read property 'n' of undefined

};

console.log(obj.m)  //报错=>

var obj = {

    n: 10

}

obj.m = obj.n *10;

console.log(obj.m) // 10

/*

* 1.形成一个全局作用域(栈内存)

* 2.代码自上而下执行

    1).首先开辟一个新的堆内存,把键值对存储到内存中

        =n: 10,

        m: obj.n *10 => 此时对内存信息还没有存储完成,空间的地址还没有给obj,此时的obj是undefined,obj.n<=>undefined.n

*/

案例二:

var ary1 = [3,4];

var ary2 = ary1;

ary2[0] = 1;

ary2 = [4,5];

ary2[1] = 2;

ary1[1] = 0;

console.log(ary1,ary2)  //(1) [1, 0] (2) [4, 2]

数组存入堆内存的理解

相关文章

  • 浅聊js运行机制

    // 浅聊js的运行机制(堆栈内存和不同的数据类型的操作方式) var a = 12; var b = a; b ...

  • JS 运行机制(Event Loop)硬核干货分析报告

    1. JS 运行机制(前后端) 1.1 单线程 文章的开始,聊下 JS 的历史,下图 1.1.1 的大神叫 Bre...

  • 最全js运行机制

    js运行机制

  • js new 运行机制

    js手札--js中new到底做了些啥JS核心系列:理解 new 的运行机制深入理解 Javascript 运行机制及原型

  • 浅析Vue.nextTick()原理

    1、为什么用Vue.nextTick() 首先来了解一下JS的运行机制。 JS运行机制(Event Loop) J...

  • 运行机制,宏任务 与 微任务

    运行机制: JS 的本质是单线程执行 事件队列:同步任务,异步任务() 运行机制 1,JS 的本质是单线程执行 单...

  • Node.js 有什么弊端

    《深入浅出 Node.js》阅读随笔 此文为《为什么选择 Node.js》姊妹篇,简单聊一下 Node.js 的缺...

  • 前端知识点

    JS 1. 事件循环 「硬核JS」一次搞懂JS运行机制[https://juejin.cn/post/684490...

  • js运行机制

    js运行机制 在日常面试求职中,不免会做几道面试题,这面试题中往往会遇到js执行输出顺序,而这运行机制是我们每个前...

  • Event Loop

    关于浏览器的多进程,JS单线程等涉及浏览器整体运行机制、浏览器内核、JS运行机制,请看这篇文章,全是干货,什么时候...

网友评论

      本文标题:浅聊js运行机制

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