1. 什么是JS对象? 在JS中,对象是一组无序属性的集合。其中,属性可以是基本数据类型、引用类型、函数。如下面这个对象的例子: var chai={ name : "柴毛毛", // 属性为基本数据类型 perosn : { // 属性为引用类型 address : "xxx", sex : "man" }, getName : function () { // 属性为函数 return this.name; } }
什么是内存管理 对内存的产生、分配、释放的过程就叫做内存管理 为什么要有内存管理 任何一门编程语言都有自己的内存管理的机制,有一些语言底层封装了一些内存回收的接口和方法,那么js中其实也有,我们叫做垃圾回收,不过js的相对比较混乱,原因是我们在创建和分配的过程没问题,但是释放的时候是自动释放,所以导致很多“垃圾”并不会得到合理的释放,就因为js是自动释放导致我们写js代码的程序员们觉得不需要对js代码中存在的内存问题进行处理,最后会导致代码中出现很多难以回收的内存,造成内存泄漏! js中内存的
前言:最近在写 Node.js Addon 的过程中,遇到了一个问题,然后发现是 ObjectWrap 弱引用导致的,本文介绍一下具体的问题和排查过程,以及 ObjectWrap 的使用问题。
虽然在js中没有类,构造函数本质上也只是一个普通函数,new关键字调用一个构造函数来创建一个新对象,也是js在努力模仿面向对象语言中类new对象的实现,这个模仿过程也对开发者造成很大误导,但不能否认的是也降低了理解的门槛,在初期快速上手阶段还是很有帮助的。
等角度进行了一些常规概念的介绍和梳理。而今天,我们选择了一个在前端范围内,占很大比重的构建工具--Webpack。
-- Js运行之前的那么一瞬间,生成一个活动对象(Active Object),简直AO对象。
在js中[[Prototype]]属性最常出现的地方构造函数添加“原型方法”上面了。
JS第一天: 作用域: 全局 局部: 块级 函数 …. 作用域链 JS垃圾回收机制GC, 内存分配, 内存使用, 内存回收 全局作用域浏览器关了才回收, 函数作用域执行完后才回收 闭包 内部函数+外部函数的变量 变量和函数的提升 函数的动态参数和剩余参数–展开表达式 箭头函数: this指向上一个作用域的this 数组解构, 多维数组 对象解构, 多维对象 forEach: 循环遍历数组对象 filter数组筛选: 会返回一个新数组 价格筛选案例 王者荣耀筛选英雄案例 JS第二天: 创建对象的三种方式: 1
不知道之前在哪看的一句话:"在JS里,一切都是对象~",当时觉得还挺有道理的.毕竟像常用的函数,数组等的确都是对象!(可以用typeof查看).
为何放弃第一种方案 UIWebView的JSContext获取 上篇中,我们通过简单的kvc获取UIWebVIew的JSContext,但是实际上,apple并未给开发者提供访问UIWebView的方法,虽然通过KVC可达到目标,但是当APP采用该种hack方法时,有很大几率不能通过APP Store的审核,这对于一个基于上线的商业APP而言是难以忍受的,所以我们必须寻找另一种方法来获取UIWebView的JSContext而且足够安全易用,因此我们需转移目光。 解决 WebFrameLoadDel
我们都知道Nodejs遵循的是CommonJS规范,当我们require('moduleA')时,模块是怎么通过名字或者路径获取到模块的呢?首先要聊一下模块引用、模块定义、模块标识三个概念。
一切皆“对象” JS中一切皆“对象” “对象”是属性的集合,而属性又是对象。既然属性又是对象,那么一个对象的属性也可以拥有属性,如: //定义一个函数getName var getName = function(){ return "chaiMaoMao"; } //由于一切皆对象,故getName也为对象,故可以给它添加属性,属性可以是任何类型 getName.value = "lalala"; getName.toString = function(){ //…… } JS中的“对象
基于 https://www.bilibili.com/video/BV1Kt411V7rg?p=7 整理 1 配置 小程序的很多开发需求都是通过配置文件来实现。这样可以提高开发效率且能保证小程序的
有段时间没更新博客了,之前计划由浅到深、从应用到原理,更新一些RN的相关博客。之前陆续的更新了6篇RN应用的相关博客(传送门),后边因时间问题没有继续更新。主要是平时空余时间都用来帮着带娃了,不过还是要挤挤时间来总结下,目标是完成由浅到深、由应用到原理的RN系列博客。本篇算是属于原理部分的博客,不过不在之前计划中。本篇是本人在公司内部某事业群大前端月刊中发布的一篇纯技术分享的博客,是基于Facebook的RNTester工程进行的TurboModule的源码分析,因为不涉及公司内部的敏感代码及相关信息,而且在公司内部发布受众有限,所以就以个人名义同步到自己的博客中,与大家分享及交流。文中所述内容仅代表个人观点,如有偏颇或不恰当之处还望指正。
当我们首次运行 Vite 的时候,Vite 会执行依赖预构建,目的是为了兼容 CommonJS 和 UMD,以及提升性能。
谈起闭包,它可是JavaScript两个核心技术之一(异步和闭包),在面试以及实际应用当中,我们都离不开它们,甚至可以说它们是衡量js工程师实力的一个重要指标。下面我们就罗列闭包的几个常见问题,从回答问题的角度来理解和定义你们心中的闭包。
优质视频教程福利一:http://www.longstudy.club/tui...
本文介绍了Vue.js 2.0的渲染过程,从初始化、挂载、渲染、到DOM更新,全面解析了Vue.js 2.0的渲染过程。主要包括Vue的初始化、Vue的渲染、Vue的DOM更新、Vue的虚拟DOM、Vue的Diff算法、Vue的Patch方法等。同时介绍了Vue.js 2.0的渲染过程,包括自定义Render函数、模板、el等,并通过具体代码示例讲解了整个渲染过程的实现。
(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)
webpack 编译过程都是围绕着这些关键对象展开的,更详细完整的信息,可以参考 Webpack 知识图谱 。
关键渲染路径概念 浏览器是如何将HTML、JS、CSS、image等资源渲染成可视化的页面的呢?本文简单介绍一下渲染过程中涉及到的关键步骤。 该过程分为四步:模型对象的构建、渲染树构建、布局、绘制。
二、解释型语言:支持动态类型,弱类型,在程序运行的时候才进行编译,而编译前需要确定变量的类型,效率比较低,对不同系统平台有较大的兼容性。
Vue.js 2.0引入Virtual DOM,比Vue.js 1.0的初始渲染速度提升了2-4倍,并大大降低了内存消耗。那么,什么是Virtual DOM?为什么需要Virtual DOM?它是通过什么方式去提升页面渲染效率的呢?这是本文所要探讨的问题。
有了前面两篇文章的基础后,我们来谈一谈在JS中创建对象的几种方式。 建议大家先预习下先前的两篇博客: 稳扎稳打JavaScript(一)——作用域链 稳扎稳打JavaScript(二)——图解对象内存模型 在JS中,创建对象的方式有很多,而且各有千秋,我们需要根据实际的业务需求选择不同的方式。 1. 工厂模式 这是创建对象最为简单的方式。 1.1. 定义方式 工厂模式的思想是:将对象构建的过程封装在一个函数中。这个函数能创建一个对象,并为他进行初始化赋值,最后返回这个对象。若要新建对象,调用这个
在讨论require和import的区别之前,我们首先要了解的是,es6module的代码最终都会被打包工具转化为require才能实行,关于这俩的区别网上有大把的文章,但是都不是很系统,小编这里整合了一下,总结了一下这两者区别,require遵循的是commonjs规范,import遵循的是es6module规则。
在现代js中,let&const是创建变量的不同方式。 在早期的js中,咱们使用var关键字来创建变量。 let&const关键字是在ES6版本中引入的,其目的是在js中创建两种不同类型的变量,一种是不可变的,另一种是可变的。
之前啊我们公众号的内容要求可严了,要么技术上有原创性,要么是程序员小哥哥们自己实践经验的总结。可是你们知道吗,美团技术同学都可爱学习了,内部Wiki里积累了好多好多深入研究和学习性的技术文章。美美一直觉得这些对其他公司的工程师小哥哥也是好东西,所以就和院长说选出一些能对外分享的,开个新专栏吧。围着他说啊说啊好半天,他老人家终于同意啦~~
Dependency Graph 概念来自官网 Dependency Graph | webpack 一文,原文解释是这样的:
javascript该怎么学呢?Js给初学者的印象总是那么的“杂而乱”,相信很多初学者都在找轻松学习Js的途径。在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条“轻松学习Js之路”。
当我们需要向后端传json字符串的时候,需将JavaScript的对象转成json格式,这个过程就是序列化。
动态化作为移动客户端技术的一个重要分支,一直是业界积极探索的方向。目前业界流行的动态化方案,如Facebook的React Native,阿里巴巴的Weex都采用了前端系的DSL方案,而它们在iOS系统上能够顺利的运行,都离不开一个背后的功臣:JavaScriptCore(以下简称JSCore),它建立起了Objective-C(以下简称OC)和JavaScript(以下简称JS)两门语言之间沟通的桥梁。无论是这些流行的动态化方案,还是WebView Hybrid方案,亦或是之前广泛流行的JSPatch,JSCore都在其中发挥了举足轻重的作用。作为一名iOS开发工程师,了解JSCore已经逐渐成为了必备技能之一。
在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条webpack机制中,去改变webpack的运作,使得整个系统扩展性良好
尤其是在一些业务比较复杂的场景,原生 JavaScript 实现可能很啰嗦,但使用第三方工具库,通常一行代码就搞定了。
import and require 1. import 是什么 import 是一个 promise 对象 2. import 和 require require/exports: CommonJs/AMD 中为了解决模块化语法而引入的 import/export: ES6 引入的新规范 2.1 调用时间 require 是运行时调用,所以理论上可以运作在代码的任何地方 import 是编译时调用,所以必须放在文件的开头 2.2 本质 require 是赋值过程,其实 require 的结果就是对象、数字
Webpack 特别难学!!!时至 5.0 版本之后,Webpack 功能集变得非常庞大,包括:模块打包、代码分割、按需加载、HMR、Tree-shaking、文件监听、sourcemap、Module Federation、devServer、DLL、多进程等等,为了实现这些功能,webpack 的代码量已经到了惊人的程度:
本期精读的文章是:JS引擎基础之 Shapes and Inline Caches
JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用就可以使用 JavaScript 调用任何 Objective-C 原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug,目前在 github 上开源。 微信 iOS 客户端使用了 JSPatch,本篇文章详细阐述 JSPatch 的实现原理和一些细节,以帮助使用者更好地了解和使用 JSPatch。文章较长,建议在 PC / Mac 观看。 大纲 基础原理 方法调用 1.require
上面说提到的结构,就是模块;按照这种结构划分开发程序的过程,就是模块化开发的过程;
学习Javascript人,大多听说一句话叫js里面一切都是对象。我刚开始接触javascript面向对象编程时候,挺乱的,我当时习惯性的把PHP的面像对象思想套用在js上面,其实js的面向对象与传统的面向对象还是有很多区别的。这里就不再去讲解基础的面向对象是什么了,看这篇文章就默认大家都知道面向对象的概念。 首先,在目前的js版本中,依然没有引入class这个关键词,js里面没有类的概念,其他语言在实例化一个对象的时候,都是使用new 类名来得到实例,而js由于没有class,因此它的面向对象也可以理
在研究跨端开发时,我的一个重要目标,是可以让react组件跑在微信小程序中。在这个过程中,我探索了微信小程序的架构,并且引发了很多思考。而作为跨端开发,实际上很难做到 write once,run anywhere,因为每个平台所提供的能力是不一样的,例如微信小程序提供了原生的能力,例如调起摄像头或其他需要原生环境支持的能力,在微信小程序中开发虽然也是在webview中开展,但是,却需要一些原生的思维。所以,要做到 write once 就必须有一些限制,这些限制注定了我们无法完全利用小程序的能力,仅仅只用到一些布局的能力而已。所以,奉劝各位,在做跨端开发时,要有个心理准备。但如果跳出跨端开发,我现在只开发小程序,那我能否用我熟悉的react来开发呢?甚至,能否用我开发的nautil框架来开发呢?答案是可以的,本文将带你一步一步实现自己的react小程序开发之路,帮助你在某些特定的场景下,完成react项目往小程序迁移的目标。
学习 Webpack 的原因 目前前端技术发展很快,引入了越来越多的思想、框架和工具 现阶段的大型应用就要求前端必须要有独立的项目,独立的项目想要有足够的效率就必须进行工程化。 具有复杂数据状态的应用
作者:郭泽豪 本篇教程关于Nodejs的文件模块机制,具体讲CommonJs规范以及Nodejs文件模块的实现原理。 本章的重点内容: CommonJs的模块规范,包括模块引用,模块定义以及模块标识
SDK的项目折腾了一个月,终于快到收获的时候,把这过程中的一些心得体会记录一下吧~
最近一段时间刚好在公司内部涉及一些老旧项目的优化,所以对于 Web 网页性能方面沉淀了一些自己的看法。
在软件系统中经常碰到这类需求:当一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。这是建立一种「对象与对象之间的依赖关系」,一个对象发生改变时将「自动通知其他对象」,其他对象将「相应做出反应」。
Vue.js作为一个后起的前端框架,借鉴了Angular 、React等现代前端框架/库的诸多特点,并且 取得了相当不错的成绩。
JS 语言不像 C/C++, 让程序员自己去开辟或者释放内存,而是类似Java,采用自己的一套垃圾回收算法进行自动的内存管理。作为一名资深的前端工程师,对于JS内存回收的机制是需要非常清楚, 以便于在极端的环境下能够分析出系统性能的瓶颈,另一方面,学习这其中的机制,也对我们深入理解JS的闭包特性、以及对内存的高效使用,都有很大的帮助。
在软件系统中经常碰到这类需求:当一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。这是建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。
领取专属 10元无门槛券
手把手带您无忧上云