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

JS ----- 底层原理

什么是JS JavaScript是一种基于对象动态、弱类型脚本语言(简称JS),是一种解释型语言,和其他编程语言不同,如java/C++等编译型语言,这些语言在代码执行前会进行通篇编译,先编译成字节码...而JS不是这样做JS是不需要编译成中间码,而是可以直接在浏览器中运行,JS运行过程可分为两个阶段,编译和执行。...(可参考你不知道JS这本书),当JS控制器转到一段可执行代码时(这段可执行代码就是编译阶段生成),会创建与之对应执行上下文(Excution Context简称EC)。...执行上下文可以理解为执行环境(执行上下文只能由JS解释器创建,也只能由JS解释器使用,用户是不可以操作该"对象")。...JS 底层运行原理 每调用一个函数就会生成一个执行环境(俗称执行上下文),执行上下文环境数量没有限制 每调用一个函数就会生成一个执行环境(俗称执行上下文),执行上下文环境数量没有限制 单线程 同步执行

2K10
您找到你想要的搜索结果了吗?
是的
没有找到

hashmap低层原理(js底层原理)

大家好,又见面了,我是你们朋友全栈君。 数组:其实所谓数组指就是一组相关类型变量集合,并且这些变量彼此之间没有任何关联。...存储区间连续,占用内存严重,数组有下标,查询数据快,但是增删比较慢; 链表:一种常见基础数据结构,是一种线性表,但是不会按照线性顺序存储数据,而是每一个节点里存到下一个节点指针。...HashMap结构及原理 HashMap是基于哈希表Map接口非同步实现。实现HashMap对数据操作,允许有一个null键,多个null值。...HashMap扩容机制 扩容必须满足两个条件 存放新值时候当前已有元素必须大于阈值; 存放新值时候当前存放数据发生hash碰撞(当前key计算hash值计算出数组索引位置已经存在值) HashMap...HashMap也有可能存储更多键值对,最多可以存储26个键值对,我们来算一下:存储前11个值全部发生hash碰撞,存到数组同一个位置中,(这时元素个数小于阈值12,不会扩容),之后存入15个值全部分散到数组剩下

1.8K20

Node.js 底层原理

前言:之前分享了 Node.js 底层原理,主要是简单介绍了 Node.js 一些基础原理和一些核心模块实现,本文从 Node.js 整体方面介绍 Node.js 底层原理。...第一部分是首先介绍一下 Node.js 组成和代码架构。然后介绍一下 Node.js Libuv, 还有 V8 和模块加载器。最后介绍一下 Node.js 服务器架构。...1 Node.js 组成和代码架构 下面先来看一下Node.js 组成。Node.js 主要是由 V8、Libuv 和一些第三方库组成。 1. V8 我们都比较熟悉,它是一个 JS 引擎。...Node.js 代码主要是分为三个部分,分别是C、C++ 和 JS。 1. JS 代码就是我们平时在使用那些 JS 模块,比方说像 http 和 fs 这些模块。 2....可以看到,Node.js 虽然是跑在多线程上面的,但是所有的 JS 代码都是跑在单个线程里,这也是我们经常讨论 Node.js 是单线程还是多线程,从不同角度去看就会得到不同答案。

98340

Node.js底层原理

前言:本文根据最近做一次分享整理而成,希望能帮忙大家深入理解Node.js一些原理和实现。 大家好,我是一名Node.js爱好者,今天我分享主题是Node.js底层原理。...在大前端趋势下,Node.js不仅拓展了前端技术范围,同时,扮演角色也越来越重要,深入了解和理解技术底层原理,才能更好地为业务赋能。 今天分享内容主要分为两大部分。...第一部分是Node.js基础和架构, 第二部分是Node.js核心模块实现。...一 Node.js基础和架构 Node.js组成 Node.js代码架构 Node.js启动过程 Node.js事件循环 二 Node.js核心模块实现 进程和进程间通信...V8:实现JS解析和支持自定义功能,得益于V8支持自定义拓展,才有了Node.js。 Node.js代码架构 ? 上图是Node.js代码架构,Node.js代码主要分为JS、C++、C三种。

1.9K20

【算法】二分法 ① ( 二分法基本原理简介 | 二分法与哈希表对比 | 常见算法对应时间复杂度 )

文章目录 一、二分法基本原理简介 1、二分法与哈希表对比 2、二分法具体步骤 二、常见算法对应时间复杂度 一、二分法基本原理简介 ---- 二分法算法 是 基于 数组 数据结构 ; 数组 中元素...是 已经 排序好 , 由于 元素 是有序 , 因此在 查询目标值 时候 , 可以更加高效 查询 其所在数组索引 ; 1、二分法与哈希表对比 哈希表时间复杂度 : 如果将所有元素 放在 哈希表..., 则无法将其完整读取到内存中 , 此时就无法使用哈希表进行查询了 ; 二分法 与 哈希表法 对比 : 算法灵活性 : 使用二分法 查询数组中数据 , 数组数据不仅仅局限于内存中 , 可以 存放在硬盘..., 网络 等介质中 , 如 : 存放在硬盘中 , 甚至可以存放在 不同设备 多块硬盘 中 ; 时间复杂度 : 二分法 时间复杂度 是 O(\log n) , 其比 哈希表 HashSet... 时间复杂度 O(1) 要高 , 但是 二分法 实现非常灵活 ; 2、二分法具体步骤 二分法步骤 : 首先 , 确定 数组 查找区间 , 一般是 从第 0 个元素 到 最后一个元素 , 开始元素索引设置为

1.2K20

JS加密、JS混淆技术原理简介

JS加密、JS混淆技术原理简介JS加密、JS混淆、JS混淆加密,所指相同,都是指对JS代码进行加密式处理,使代码不可读,以达到保护代码目的。...其原理,根据加密或混淆处理深度不同,大体上可分两种,下面简述技术原理。第一种,对代码进行字符替换,比如Eval加密、JJEncode加密,都属于这一类。这种方式,直接对JS代码进行处理,是可逆加密。...第二种,操作层面与前者最大差别是,不是对JS代码直接进行分析并加密,而是会进行低层处理,先会对JS代码进行词法分析、语法分析,转化成AST(抽象语法树),得到AST之后,混淆加密操作都是在AST中进行...,完成语法树加密修改之后,再根据AST重新生成全新密文式JS代码,专业JS代码加密混淆工具,比如JShaman、JScrambler都是属于这一类。...如此混淆过JS代码,人无法读懂,但机器可识别,是可以直接运行,不需要经过解密,因此,不存在通过解密而直接逆向出原码问题,安全性高。在业内是被广泛认可和应用

40840

Node.js原理

Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型实时应用。 Node.js 是一个可以让 JavaScript 运行在浏览器之外平台。...历史上将 JavaScript移植到浏览器外计划不止一个,但Node.js 是最出色一个。...Node.js作用 Node 公开宣称目标是 “旨在提供一种简单构建可伸缩网络程序方法”。...Node.js能做什么 借用一句经典描述Node.js的话:正如 JavaScript 为客户端而生,Node.js 为网络而生。...运行原理分析 当我们搜索Node.js时,夺眶而出关键字就是 “单线程,异步I/O,事件驱动”,应用程序请求过程可以分为俩个部分:CPU运算和I/O读写,CPU计算速度通常远高于磁盘读写速度,这就导致

2.9K70

Js算法与数据结构拾萃(5):二分法

Js算法与数据结构拾萃(5):二分法 从本节开始,重心将放到算法层面。 ---- 也许你在《幸运52》看过这样游戏,假设一台iPhone x 标价8300元,某人让你尽可能快地猜出它价格。...经过有限几次猜测,你很快猜出了它真实价格。 采用二分法查找时,数据需是排好序。...肯定是超时。应该考虑二分法。 此题解法无JavaScript可选。...于是网上就开始了各种秀写法表演。 优化思路(二分法) 你至今可以在GitHub上,看到这个小小模块写法各种实现历史,但本文只提及二分法解答。...这里涉及几个js中罕见运算: 按位与(&) 给定两个数,对它们32 位表达式每一个位执行按位“与(&&)”运算。如果两个位均为 1,则结果是 1。否则,结果为 0。

75710

前端进阶JS运行原理

JS运行原理 深入了解V8引擎原理 浏览器内核是由两部分组成,以webkit为例: WebCore:负责HTML解析、布局、渲染等等相关工作; JavaScriptCore:解析、执行JavaScript...代码; 官方对V8引擎定义: V8是用C ++编写Google开源高性能JavaScript和WebAssembly引擎,它用于Chrome和Node.js等 它实现ECMAScript和WebAssembly...全局代码执行过程 js引擎会在执行代码之前,会在堆内存中创建一个全局对象:Global Object(GO) 该对象 所有的作用域(scope)都可以访问 里面会包含Date、Array、String...、Number、setTimeout、setInterval等等 其中还有一个window属性指向自己 js引擎内部有一个执行上下文栈(Execution Context Stack,简称ECS),它是用于执行代码调用栈...复制 函数结束,之后输出n 作用域链也是我们JS闭包一个重点, js中闭包就是通过作用域链方式来完成变量可以跨作用域访问,为我们加快提升了开发效率 也省去很多麻烦

3.6K50

JS原生数据绑定原理

用过vue的人都知道,vue有一个特别好用数据绑定,只要绑定了,你只要改变了这个数据,页面也会跟着渲染。其实原生JS也是可以做到,vue其实就是用了原生原理。...; descriptor:目标属性所拥有的特性; 这三个都是必须,前两个都好理解,第三个,说简单点就是这个方法自带几个特性:Value、writable、enumerable、configurable...和setter方法,数据绑定主要方法。...只要调用obj.hello,就会触发get方法,这时候打印出来obj.hello一直等于3,因为我们return就是3,所以这边应该返回改变值。...就像obj.hello = 999;那么页面的值就会是999;感兴趣可以复制代码方法,一个一个方法调用,就很容易明白原生JS双向绑定。

1.8K30

co.js 异步回调原理

作者:何方舟 co.js 作为 koa 框架核心库,利用 es6 Generator 新特性来解决 callback hell 已经非常流行 。...本文将剖析 co.js 是为何用同步写法,就可以解决异步回调问题。...Generator 首先简要介绍一下 Generator 特性, co.js 是基于该特性实现,所以弄清 Generator 远离非常重要。...可是好像哪里不对,这个本质上还是之前回调方法。我们期望方法应该是类似这样,通过一个yield关键字,来表明这里是异步执行。这样写法简洁明了,但直接这样写肯定是不能执行。...在 Co 4.XX版本之后,内部机制全部改为用 Promise 实现,虽然看上去 Promise 是大势所趋,但是个人来说还是更喜欢Thunk方式。

2.5K00

co.js 异步回调原理

本文作者:IMWeb 何方舟 原文出处:IMWeb社区 未经同意,禁止转载 co.js 作为 koa 框架核心库,利用 es6 Generator 新特性来解决 callback hell...本文将剖析 co.js 是为何用同步写法,就可以解决异步回调问题。...Generator 首先简要介绍一下 Generator 特性, co.js 是基于该特性实现,所以弄清 Generator 远离非常重要。...可是好像哪里不对,这个本质上还是之前回调方法。我们期望方法应该是类似这样,通过一个yield关键字,来表明这里是异步执行。这样写法简洁明了,但直接这样写肯定是不能执行。...在 Co 4.XX版本之后,内部机制全部改为用 Promise 实现,虽然看上去 Promise 是大势所趋,但是个人来说还是更喜欢Thunk方式。

2.6K80

简单探索 js 中 something >> 0 原理

关于这个问题是今天改公司项目小程序一个bug时看到,修复这个bug解决方法是需要引入 String.prototype.padStart polyfill,所以我就顺带扫了一眼这个 polyfill...,毕竟之前看过好多关于 js 技巧文章,其中都介绍过这种写法,并且自己也在实际工作中运用过多次。...无论之前看过它几次,写过它几次,都没有追究它原理到底是什么。至于要说当时为什么没有追究,原因一方面是因为没有时间,另一方面是当时自己水平也比较差,什么 ECMAScript 标准根本无从看起啊。...经过不懈努力,终于觉得自己可以看懂一些规范了,所以借这个机会来根据规范看看它原理是什么。 关于这行代码具体使用了什么语法以及达到效果我就不废话了。第一步,我们需要从规范哪里看起呢?...但是当我们遇到一些自己不懂或者不熟悉东西时,一定要有意识去寻根问底,这样积少成多,精通 js 早晚会变成现实。

1.1K30

【算法】二分法 ③ ( 山脉数组峰顶索引 | 枚举法 | 二分法 )

文章目录 一、山脉数组峰顶索引 二、枚举法 三、二分法 一、山脉数组峰顶索引 ---- https://leetcode.cn/problems/peak-index-in-a-mountain-array...输入:arr = [0,10,5,2] 输出:1 山脉数组 就是 先增后减 序列 , 山顶 就是最大值 , 本题目求是 最大值索引 ; 上一篇博客 【算法】二分法 ① ( 二分法基本原理简介...| 二分法与哈希表对比 | 常见算法对应时间复杂度 ) 中提到了常见算法时间复杂度如下 , 时间复杂度从小到大进行排序为 : O(1) : 位运算 , 哈希表查询 O(\log n) :...: 排列相关搜索问题 ; 解决该算法问题有两种方案 : 枚举法 : 从头到尾进行遍历一遍 , 时间复杂度 O(n) ; 二分法 : 使用二分法遍历数组 , 时间复杂度 O(\log n) ;...---- 参考上一篇博客 二分法模板 : 注意以下二分法要点 ; ★ 要点一 : 循环控制变量 , 尽量不要使用 start <= end 或 start < end 作为循环判定条件 , 在某些情况下会执行失败

61920

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券