seajs

前端面试题整合(JS进阶篇)(一)

限于喜欢 提交于 2020-11-09 10:44:28
js的垃圾回收机制是什么原理 垃圾回收机制有两种方法 第一种是标记清除法:当变量进入执行环境时,就标记这个变量为”进入环境”,当变量离开环境的时候,则将其标记为”离开环境”,垃圾收集器在运行的时候会给储存在内存中的所有变量都加上标记,然后它会去掉环境中的标量以及被环境中的变量引用的标记,而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了,最后,垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收他们所占用的内存空间 第二种是引用计数法:当声明了一个变量并将一个引用类型赋值给改变量是,则这个值得引用次数就是1,相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值得引用次数就减1,当这个引用次数变成0时,则说明没有办法在访问这个值了,因而就可以将其所占的内存空间给收起来,这样垃圾收集器再下次运行时,它就会释放那些引用次数为0的值所占的内存 哪些操作会造成内存泄露,怎样避免内存泄露 会造成内存泄漏的操作: 意外的全局变量引起的内存泄露 闭包引起的内存泄露 控制台日志 没有清理的DOM元素引用 被遗忘的定时器或者回调 避免内存泄露的操作: 减少不必要的全局变量,或者生命周期较长的对象,及时对无用的数据进行垃圾回收 注意程序逻辑,避免“死循环”之类的 避免创建过多的对象 原则:不用了的东西要及时归还(置为null) AMD\CMD区别

模块化开发及AMD、CMD、Require.js、sea.js、common.js、ES6的对比

两盒软妹~` 提交于 2020-10-27 12:21:51
一,模块化开发: 定义: 所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数 使用函数封装: function func1 ( ) {      //... } function func2 ( ) {      //... } 注释 : 上面的函数func1 ()和func2 (),组成一个模块。使用的时候,直接调用就行了。这种做法的缺点很明显:影响了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。 立即执行函数的写法: 使用"立即执行函数"(Immediately-Invoked FunctionExpression,IIFE),可以达到不暴露私有成员的目的。这个也是闭包处理的一种方式 var obj = ( function ( ) {      var _age = 0 ;      var func1 = function ( ) {        //...      } ;      var func2 = function ( ) {        //...      } ;      return {       m1 : func1 ,       m2 : func2      } ; } ) ( ) ; 使用上面的写法,外部代码无法读取内部的age变量。

30分钟学会前端模块化开发

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-18 07:11:16
早期的javascript版本没有块级作用域、没有类、没有包、也没有模块,这样会带来一些问题,如复用、依赖、冲突、代码组织混乱等,随着前端的膨胀,模块化显得非常迫切。 前端模块化规范如下: 一、前端模块化概要 1.1、模块概要 JavaScript在早期的设计中就没有模块、包、类的概念,开发者需要模拟出类似的功能,来隔离、组织复杂的JavaScript代码,我们称为模块化。 模块就是一个实现特定功能的文件,有了模块我们就可以更方便的使用别人的代码,要用什么功能就加载什么模块 。 模块化开发的四点好处:   (1)、 避免变量污染,命名冲突   (2)、提高代码复用率   (3)、提高了可维护性   (4)、方便依赖关系管理 为了避免缺少模块带来的问题,我们可以看看程序员应对的历程: 1.2、函数封装 我们在讲函数的时候提到,函数一个功能就是实现特定逻辑的一组语句打包,而且JavaScript的作用域就是基于函数的,所以把函数作为模块化的第一步是很自然的事情,在一个文件里面编写几个相关函数就是最开始的模块了 // 函数1 function fn1(){ // statement } // 函数2 function fn2(){ // statement } 这样在需要的以后夹在函数所在文件,调用函数就可以了 缺点: 污染了全局变量,无法保证不与其他模块发生变量名冲突

AMD 和 CMD 的区别

[亡魂溺海] 提交于 2020-03-31 16:32:39
AMD 规范在这里: https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这里: https://github.com/seajs/seajs/issues/242 AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。 CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。 类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出。还有不少⋯⋯ 这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。目前这些规范的实现都能达成 浏览器端模块化开发的目的 。 区别: 1. 对于依赖的模块,AMD 是 提前执行 ,CMD 是 延迟执行 。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible. 2. CMD 推崇 依赖就近 ,AMD 推崇 依赖前置 。看代码: // CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖可以就近书写 b

AMD规范与CMD规范

馋奶兔 提交于 2020-03-25 15:36:19
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式。可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在。对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得“有理可循”。 还有一些对于模块化一些专业的定义为:模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可。 首先,既然是模块化设计,那么作为一个模块化系统所必须的能力: 1. 定义封装的模块。 2. 定义新模块对其他模块的依赖。 3. 可对其他模块的引入支持。 好了,思想有了,那么总要有点什么来建立一个模块化的规范制度吧,不然各式各样的模块加载方式只会将局搅得更为混乱。那么在JavaScript中出现了一些非传统模块开发方式的规范 CommonJS的模块规范,AMD(Asynchronous Module Definition),CMD(Common Module Definition)等

用grunt构建seajs项目遇到的各种坑

烂漫一生 提交于 2020-02-29 11:23:00
使用grunt构建seajs项目遇到的各种坑 [TOC] 使用grunt-cmd-transport转换为具名模块遇到的问题 1. 最新版本依赖不能完全提取 grunt-cmd-transport 最新版本0.5.1不能完全提取依赖,需要降级到0.4.1。 参考: https://github.com/spmjs/grunt-cmd-transport/issues/103 2. 转换后出新双反斜杠 同样需要降级到0.4.1才行。 参考: https://github.com/spmjs/grunt-cmd-transport/issues/96 http://blog.csdn.net/weizengxun/article/details/45153519 3. 会将深层次的依赖也提取到deps中 网上解决方法,不要配置 paths ,然后用 --force 强制执行。 但是如果所有require都用相对路径,也就是都以 . 开头,就不需要强制执行了。 transport 后所有依赖包括间接依赖都会提取到 deps 中。这样在 concat 的时候就不会出现模块重复或者漏掉模块的情况。 所以为了避免 concat 出现问题, require 一定要用相对路径, concat 设置 include 为 relative 参考: http://blog.csdn.net/kyfxbl

大前端模块化

青春壹個敷衍的年華 提交于 2020-02-27 07:47:22
打一个通用 UMD 包 有这样一个场景,客户端运行很久,但是法务部和数据部需要收集用户的一些信息,这些信息收集好之后需要进行相应的数据处理,之后上报到服务端。客户端提供一个纯粹的 JS 执行引擎,不需要 WebView 容器。iOS 端有成熟的 JavaScriptCore、Android 可以使用 V8 引擎。这样一个引擎配套有一个 SDK,访问 Native 的基础能力和数据运算能力,可以看成是一个阉割版的 Hybrid SDK 额外增加了一些数据处理能力。 问题结束了吗?处理逻辑的时候还需要用到2个库: cheerio 和 sql 。因为都是 Node 工程,所以纯粹的 JS 环境是没办法直接执行。所以需求就进行了转变 ———— 将 Node 项目打包成 UMD 规范。这样就可以在纯粹的 JS 环境下运行。接下来的文章就分析下各种规范。其实也就是前端模块化的几种规范。 前端模块化开发的价值 随着互联网的飞速发展,前端开发越来越复杂。本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及以 Sea.js 为例讲解如何进行前端的模块化开发。 恼人的命名冲突 我们从一个简单的习惯出发。我做项目时,常常会将一些通用的、底层的功能抽象出来,独立成一个个函数,比如 function each(arr) { // 实现代码 } function log(str) { //

前端模块化开发之seaJs

寵の児 提交于 2020-02-27 04:50:59
了解后端语言的童鞋一定听过模块化开发的概念,比如java、python等后端语言都有自己的模块化特性,然而和后端语言相比,javascript还尚未实现模块化的功能,虽然之后的更高版本可能引入模块化开发的概念,但是现阶段我们可以通过第三方控件来实现。 今天我就来给大家介绍下可以帮助我们实现前端模块化的工具——seaJs。如果对seaJs已经有实际使用经验的小伙伴可以直接忽略这篇文章。 如果有小伙伴了解requireJs,那么学习seaJs会相当的容易,因为requireJs也是前端模块化的构建工具之一,两者的主要区别就是requireJs是基于AMD规范的,而seaJs是基于CMD规范的。 至于什么是AMD和CMD,在这里不做详细介绍啦,想要了解的童鞋可以查看seaJs作者玉伯的回答: http://www.zhihu.com/question/20351507/answer/14859415 好了,我们切入正题,首先先介绍下seaJs的下载及配置。 一、seaJs的下载及配置 下载: http://seajs.org/docs/#downloads (当前最新版本为3.0.0,还可以使用smp下载) 配置:(1)将下载后的sea.js文件挪到自己的网站目录下(sea.js位于sea-modules\seajs\seajs中);     我的网站目录如下:       (2

JavaScript模块化的作用、原理、方案

别说谁变了你拦得住时间么 提交于 2020-02-26 01:46:25
一、模块化概念 将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起; 块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信。 二、模块化作用 为什么要用模块化的JavaScript? 因为在实际的开发过程中,经常会遇到变量、函数、对象等名字的冲突,这样就容易造成冲突,还会造成全局变量被污染; 同时,程序复杂时需要写很多代码,而且还要引入很多类库,这样稍微不注意就容易造成文件依赖混乱; 为了解决上面的的问题,我们才开始使用模块化的JS,所以说模块化的作用就是: 1、避免全局变量被污染 2、便于代码编写和维护 三、模块化历程 1、普通写法(全局函数及变量) 其实只要是不同的函数或变量放一起就是简单的模块,这样弊端很明显,就是变量容易被污染; var name = '卡卡'; function cat1(){ name = '年年'; } function cat2(){ name = '有鱼'; } 2、对象封装 将整个模块放在一个对象里面,外部访问时直接调用对象的属性或者方法就行 var cat = { name:'卡卡', cat1:function(){ var name = '年年'; console.log(name); }, cat2:function(){ var name = '有鱼'; console.log

【自己动手】sublime text插件开发

北慕城南 提交于 2020-02-02 17:56:20
今天是五四青年节,在此先祝大家节日快乐!!! --------------------------------------------华丽的分界线--------------------------------------------------- 从使用ST开始,就觉得使用起来很顺手,在加上各种各样的插件,做起开发来还真可以省不少事儿。以前做.net一直用vs,不过说实话vs是最好用的IDE,没有之一;现在呢,入了前端的行,用起vs总是觉得太过笨重,于是就用起了同事推荐的ST,从此哥开发js和php就全靠它了。 51放假的时候突发奇想,自己整个sublime text的插件玩玩。之所有有这样的想法,主要是我们的项目使用seajs负责模块的划分和加载,这样一来新建的模块就必须按照seajs要求的格式来开发,格 式 如下: 下面就以生成一个这样的模板为例来带领大家对ST插件开发有个大致的了解 ST插件开发 参考资料: http://my.oschina.net/theforever/blog/136554 ,哥就是参考这篇文档照葫芦画瓢整出来的,有兴趣的朋友情拜读原文,现在就不废话了马上开始今天的主题 ST的api是基于python的,详情见 http://www.sublimetext.com/docs/2/api_reference.html 。