日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2017面试题1

發(fā)布時(shí)間:2024/4/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017面试题1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AMD 和 CMD 的區(qū)別有哪些?

區(qū)別:

1. 對(duì)于依賴的模塊,AMD 是提前執(zhí)行,CMD 是延遲執(zhí)行。不過(guò) RequireJS 從 2.0 開始,也改成可以延遲執(zhí)行(根據(jù)寫法不同,處理方式不同)。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 默認(rèn)推薦的是
define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
a.doSomething()
// 此處略去 100 行
b.doSomething()
...
})

雖然 AMD 也支持 CMD 的寫法,同時(shí)還支持將 require 作為依賴項(xiàng)傳遞,但 RequireJS 的作者默認(rèn)是最喜歡上面的寫法,也是官方文檔里默認(rèn)的模塊定義寫法。


3. AMD 的 API 默認(rèn)是一個(gè)當(dāng)多個(gè)用,CMD 的 API 嚴(yán)格區(qū)分,推崇職責(zé)單一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,沒(méi)有全局 require,而是根據(jù)模塊系統(tǒng)的完備性,提供 seajs.use 來(lái)實(shí)現(xiàn)模塊系統(tǒng)的加載啟動(dòng)。CMD 里,每個(gè) API 都簡(jiǎn)單純粹


4. 還有一些細(xì)節(jié)差異,具體看這個(gè)規(guī)范的定義就好,就不多說(shuō)了。

?

MVC,MVP 和 MVVM

mvc?

  • View 傳送指令到 Controller
  • Controller 完成業(yè)務(wù)邏輯后,要求 Model 改變狀態(tài)
  • Model 將新的數(shù)據(jù)發(fā)送到 View,用戶得到反
  • 接受用戶指令時(shí),MVC 可以分成兩種方式。一種是通過(guò) View 接受指令,傳遞給 Controller。另一種是直接通過(guò)controller接受指令。

    ?

    MVP

    模式將 Controller 改名為 Presenter,同時(shí)改變了通信方向。

    1. 各部分之間的通信,都是雙向的。

    2. View 與 Model 不發(fā)生聯(lián)系,都通過(guò) Presenter 傳遞。

    3. View 非常薄,不部署任何業(yè)務(wù)邏輯,稱為"被動(dòng)視圖"(Passive View),即沒(méi)有任何主動(dòng)性,而 Presenter非常厚,所有邏輯都部署在那里。

    ?

    MVVM

    模式將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致。

    唯一的區(qū)別是,它采用雙向綁定(data-binding):View的變動(dòng),自動(dòng)反映在 ViewModel,反之亦然。Angular?和?Ember?都采用這種模式

    5?JavaScript內(nèi)存管理

    JS中內(nèi)存的分配和回收都是自動(dòng)完成的,內(nèi)存在不使用的時(shí)候會(huì)被垃圾回收器自動(dòng)回收。

    簡(jiǎn)單的說(shuō),js是這樣管理內(nèi)存的:

    ?找出那些不再繼續(xù)使用的變量,然后釋放其中占用的內(nèi)存。為此,垃圾收集器會(huì)按照固定的時(shí)間間隔(或代碼執(zhí)行中預(yù)設(shè)的收集時(shí)間),周期性的執(zhí)行這一操作.

    對(duì)垃圾回收算法來(lái)說(shuō),核心思想就是如何判斷內(nèi)存已經(jīng)不再使用了。下面介紹兩種常見瀏覽器的垃圾回收算法。

    1 標(biāo)記清除 (主流做法)

    2?引用計(jì)數(shù)法,跟蹤記錄每個(gè)值的被引用次數(shù)。

    ?

    6?JS中Null與Undefined的區(qū)別

    在JavaScript中存在這樣兩種原始類型:Null與Undefined。

    Undefined類型只有一個(gè)值,即undefined。當(dāng)聲明的變量還未被初始化時(shí),變量的默認(rèn)值為undefined。
    Null類型也只有一個(gè)值,即null。null用來(lái)表示尚未存在的對(duì)象,常用來(lái)表示函數(shù)企圖返回一個(gè)不存在的對(duì)象。

    ?7 閉包是什么?閉包如何避免內(nèi)存循環(huán)引用。

    閉包是在某個(gè)作用域內(nèi)定義的函數(shù),它可以訪問(wèn)這個(gè)作用域內(nèi)的所有變量。

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

    方法一、主動(dòng)設(shè)置js對(duì)象element為空,打破循環(huán)引用

    function assignHandler()

    {
    ? ?var element=document.getElementById("div1");
    ? ?var id=element.id;
    ? ?element.οnclick=function() //element的onclick引用了函數(shù)funciton,function通過(guò)閉包引用了element,照成循環(huán)引用
    ? ?{
    ? ? ? alert(id+element+sex);
    ? ? }
    ?/*閉包可以監(jiān)聽外部變量的變化,所以這里把element=null,也就是說(shuō)外部這個(gè)變量相當(dāng)于不存在了,雖然賦值是在閉包后面,閉包也能夠檢測(cè)到!所以匿名函數(shù)不會(huì)有外部的DOM對(duì)象的引用,不會(huì)內(nèi)存泄漏*/
    ? var sex="female";
    ? element=null;

    }

    ?

    方法二、通過(guò)添加另外一個(gè)閉包來(lái)避免JS對(duì)象和DOM對(duì)象之間的循環(huán)引用

    ?window.οnlοad=function outerFunction()
    {
    ? var anotherObj=function innerFunction()
    ? ?{
    ? ? ? ? ? ? alert("I have avoided the leak!");
    ? ?}
    //通過(guò)另外一個(gè)閉包來(lái)避免JS對(duì)象和DOM對(duì)象之間的循環(huán)引用
    ? function anotherInnerFunction()
    ? ?{
    ? ? ? ? var obj=document.getElementById("div1");
    ?//DOM對(duì)象引用了anotherObj函數(shù),但是anotherObj函數(shù)無(wú)法引用DOM對(duì)象
    ? ? ? ? obj.οnclick=anotherObj;
    ? };
    ? anotherInnerFunction();
    }

    方法三、通過(guò)添加另一個(gè)函數(shù)來(lái)避免閉包本身,進(jìn)而阻止內(nèi)存泄漏

    window.οnlοad=function()
    {
    ? ? ? ? var obj=document.getElementById("div1");
    ? ? ? ? obj.οnclick=doesNotLeak;
    }
    //該函數(shù)無(wú)法訪問(wèn)上面匿名函數(shù)中間的obj對(duì)象,從而可以阻止內(nèi)存泄漏!
    function doesNotLeak()
    {
    ? ?alert("我已經(jīng)阻止內(nèi)存泄漏了!");
    }

    7?解釋下浮動(dòng)和它的工作原理?清除浮動(dòng)的技巧

    浮動(dòng)元素脫離文檔流,不占據(jù)空間。

    1、<div style="clear:both;"></div>

    2、.clearfix:after?{content:".";?display:block;?height:0;?visibility:hidden;?clear:both;?}???

    .clearfix?{?*zoom:1;?}?//為了適配ie6??
    3,設(shè)置`overflow`為`hidden`或者auto

    8 iframe iframe是一種框架,也是一種很常見的網(wǎng)頁(yè)嵌入方式,零度今天給大家分析分析它的優(yōu)缺點(diǎn)。
    iframe的優(yōu)點(diǎn):

    1.iframe能夠原封不動(dòng)的把嵌入的網(wǎng)頁(yè)展現(xiàn)出來(lái)。
    2.如果有多個(gè)網(wǎng)頁(yè)引用iframe,那么你只需要修改iframe的內(nèi)容,就可以實(shí)現(xiàn)調(diào)用的每一個(gè)頁(yè)面內(nèi)容的更改,方便快捷。
    3.網(wǎng)頁(yè)如果為了統(tǒng)一風(fēng)格,頭部和版本都是一樣的,就可以寫成一個(gè)頁(yè)面,用iframe來(lái)嵌套,可以增加代碼的可重用。
    4.如果遇到加載緩慢的第三方內(nèi)容如圖標(biāo)和廣告,這些問(wèn)題可以由iframe來(lái)解決。
    iframe的缺點(diǎn):

    1.會(huì)產(chǎn)生很多頁(yè)面,不容易管理。
    2.iframe框架結(jié)構(gòu)有時(shí)會(huì)讓人感到迷惑,如果框架個(gè)數(shù)多的話,可能會(huì)出現(xiàn)上下、左右滾動(dòng)條,會(huì)分散訪問(wèn)者的注意力,用戶體驗(yàn)度差。
    3.代碼復(fù)雜,無(wú)法被一些搜索引擎索引到,這一點(diǎn)很關(guān)鍵,現(xiàn)在的搜索引擎爬蟲還不能很好的處理iframe中的內(nèi)容,所以使用iframe會(huì)不利于搜索引擎優(yōu)化。
    4.很多的移動(dòng)設(shè)備(PDA 手機(jī))無(wú)法完全顯示框架,設(shè)備兼容性差。
    5.iframe框架頁(yè)面會(huì)增加服務(wù)器的http請(qǐng)求,對(duì)于大型網(wǎng)站是不可取的。
    分析了這么多,現(xiàn)在基本上都是用Ajax來(lái)代替iframe,所以iframe已經(jīng)漸漸的退出了前端開發(fā)。

    求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

    轉(zhuǎn)載于:https://www.cnblogs.com/y896926473/p/6651884.html

    總結(jié)

    以上是生活随笔為你收集整理的2017面试题1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。