博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017面试题1
阅读量:6441 次
发布时间:2019-06-23

本文共 3606 字,大约阅读时间需要 12 分钟。

AMD 和 CMD 的区别有哪些?

区别:

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.doSomething()
// ...
})

// AMD 默认推荐的是

define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})

虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS 的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。

3. AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹

4. 还有一些细节差异,具体看这个规范的定义就好,就不多说了。

 

MVC,MVP 和 MVVM

mvc 

  1. View 传送指令到 Controller
  2. Controller 完成业务逻辑后,要求 Model 改变状态
  3. Model 将新的数据发送到 View,用户得到反

接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controller。另一种是直接通过controller接受指令。

 

MVP

模式将 Controller 改名为 Presenter,同时改变了通信方向。

1. 各部分之间的通信,都是双向的。

2. View 与 Model 不发生联系,都通过 Presenter 传递。

3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

 

MVVM

模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。 和  都采用这种模式

5 JavaScript内存管理

JS中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收器自动回收。

简单的说,js是这样管理内存的:

 找出那些不再继续使用的变量,然后释放其中占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预设的收集时间),周期性的执行这一操作.

对垃圾回收算法来说,核心思想就是如何判断内存已经不再使用了。下面介绍两种常见浏览器的垃圾回收算法。

1 标记清除 (主流做法)

2 引用计数法,跟踪记录每个值的被引用次数。

 

JS中Null与Undefined的区别

在JavaScript中存在这样两种原始类型:Null与Undefined。

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。

Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

 7 闭包是什么?闭包如何避免内存循环引用。

闭包是在某个作用域内定义的函数,它可以访问这个作用域内的所有变量。

参考 http://blog.csdn.net/liangklfang/article/details/48543917

方法一、主动设置对象element为空,打破循环引用

function assignHandler()

{

   var element=document.getElementById("div1");
   var id=element.id;
   element.οnclick=function() //element的onclick引用了函数funciton,function通过闭包引用了element,照成循环引用
   {
      alert(id+element+sex);
    }
 /*闭包可以监听外部变量的变化,所以这里把element=null,也就是说外部这个变量相当于不存在了,虽然赋值是在闭包后面,闭包也能够检测到!所以匿名函数不会有外部的DOM对象的引用,不会内存泄漏*/
  var sex="female";
  element=null;

}

 

方法二、通过添加另外一个闭包来避免JS对象和DOM对象之间的循环引用

 window.οnlοad=function outerFunction()

{
  var anotherObj=function innerFunction()
   {
            alert("I have avoided the leak!");
   }
//通过另外一个闭包来避免JS对象和DOM对象之间的循环引用
  function anotherInnerFunction()
   {
        var obj=document.getElementById("div1");
 //DOM对象引用了anotherObj函数,但是anotherObj函数无法引用DOM对象
        obj.οnclick=anotherObj;
  };
  anotherInnerFunction();
}

方法三、通过添加另一个函数来避免闭包本身,进而阻止内存泄漏

window.οnlοad=function()

{
        var obj=document.getElementById("div1");
        obj.οnclick=doesNotLeak;
}
//该函数无法访问上面匿名函数中间的obj对象,从而可以阻止内存泄漏!
function doesNotLeak()
{
   alert("我已经阻止内存泄漏了!");
}

7 解释下浮动和它的工作原理?清除浮动的技巧

浮动元素脱离文档流,不占据空间。

1、
2、.clearfix:after {
content:"."; display:block; height:0; visibility:hidden; clear:both; } .clearfix { *zoom:1; } //为了适配ie6   3,设置`overflow`为`hidden`或者auto
8 iframe
iframe是一种框架,也是一种很常见的网页嵌入方式,零度今天给大家分析分析它的优缺点。 iframe的优点: 1.iframe能够原封不动的把嵌入的网页展现出来。 2.如果有多个网页引用iframe,那么你只需要修改iframe的内容,就可以实现调用的每一个页面内容的更改,方便快捷。 3.网页如果为了统一风格,头部和版本都是一样的,就可以写成一个页面,用iframe来嵌套,可以增加代码的可重用。 4.如果遇到加载缓慢的第三方内容如图标和广告,这些问题可以由iframe来解决。 iframe的缺点: 1.会产生很多页面,不容易管理。 2.iframe框架结构有时会让人感到迷惑,如果框架个数多的话,可能会出现上下、左右滚动条,会分散访问者的注意力,用户体验度差。 3.代码复杂,无法被一些搜索引擎索引到,这一点很关键,现在的搜索引擎爬虫还不能很好的处理iframe中的内容,所以使用iframe会不利于搜索引擎优化。 4.很多的移动设备(PDA 手机)无法完全显示框架,设备兼容性差。 5.iframe框架页面会增加服务器的http请求,对于大型网站是不可取的。 分析了这么多,现在基本上都是用Ajax来代替iframe,所以iframe已经渐渐的退出了前端开发。 求y 和 z 的值 var x =1 var y = 0 var z = 0 function add(n){n=n+1} y=add(x) function add(n){n=n+3} z=add(x) underfined

转载于:https://www.cnblogs.com/y896926473/p/6651884.html

你可能感兴趣的文章
谷歌明确Fuchsia并非基于Linux内核
查看>>
即刻搜索调整
查看>>
MyEclipse 7.0快捷键ALT+/没用
查看>>
整合apache和tomcat构建Web服务器
查看>>
Microsoft word/Excel/PPT打开报错问题
查看>>
vue的video插件vue-video-player
查看>>
LR 性能分析指标解释
查看>>
Linux中用户和组的介绍及其相关命令
查看>>
IOS 自定义UISwitch
查看>>
正则表达式,替换所有HTML标签的简单实
查看>>
redis-布隆过滤器
查看>>
Object.hashCode()方法与System.identityHashCode(object)的区别
查看>>
vue的todolist -- 增删改查
查看>>
Go圣经-学习笔记入门
查看>>
微软工程师:构建强大的实时流式应用选择Apache Calcite
查看>>
混合云场景下容器技术在新能源功率预测产品中的最佳实践
查看>>
/etc/security/limits.conf的相关说明
查看>>
在docker中使用mysql数据库,在局域网访问
查看>>
10个最佳Node.js企业应用案例:从Uber到LinkedIn
查看>>
XML的解析方式
查看>>