JavaScript面試基礎小結(高手請無視)

事件委託

ul#wrap>li.item$*2>{item $}

獲得以下javascript

html<ul id="wrap">
    <li class="item1">item 1</li>
    <li class="item2">item 2</li>
</ul>

一個監聽,多個函數綁定php

jsdocument.getElementById('wrap').addEventListener("click", function(e) {
        if (e.target.nodeName === "LI") {
            console.log("ok");
            switch(e.target.className){
                case "item1":
                    f1();
                    break;
                case "item2":
                    f2();
                    break;
                default:
                    alert("not a li node");
            }
        };
    },false)

    function f1(){
        alert("f1");
    }

    function f2(){
        alert("f2");
    }

JSONP

標籤的src屬性並不被同源策略(同協議、域名、端口)所約束,因此能夠獲取任何服務器上腳本並執行。ajax的核心是經過XmlHttpRequest獲取非本頁內容,而jsonp的核心則是動態添加<script>標籤來調用服務器提供的js腳本。html

以上是網上摘抄,根據本身的理解寫下以下代碼前端

js//jsonp.html

 function getName(data){

            console.log(data.name);

        }

        var scriptP = document.createElement("script");

        scriptP.src = "http://localhost:8000/reponse.php?id=1&&callback=getName";

        window.onload=function(){
            document.body.appendChild(scriptP);
        }

php文件以下java

php//reponse.php
<?php
    $getId = $_GET["id"];
    $getCalFun = $_GET["callback"];

    $json = array(
       "id" => $getId,
       "name" => "zhangsan"
    );

   echo $getCalFun+'('+json_encode($json)+')';
?>

但卻報錯了Uncaught SyntaxError: Unexpected token <,不知道哪裏出錯了,往大嬸指出...node

原理很簡單,客戶端獲取數據根據需求動態添加script,並使jsonp的服務端拼接腳本觸發函數。ajax

This

jsvar ob = {};

ob.x = 1;
ob.f = function(){
    this.x = 2;
}
ob.f();

console.log(ob.x); // => 2

從上面的代碼能夠得知,this是引用對象,並且是能夠更改指定的對象。算法

主要應用有兩種call和applynpm

js
function change(s,v){ if(s > v){ console.log("s >v"); }else{ console.log(" s < v"); } } change.call(2,3);// 當前this 指向window ... function changeColor(s,v){ this.style.s = v; } var box = document.querySelector(".box"); changeColor.call(box, "backgroundcolor" , "blue"); //當前this指向changeColor

call和apply的區別只是apply只接受兩個參數,第二個參數是數組形式。json

疑問

jsvar obj = {
    x : 100,
    y : function(){
        setTimeout(
            function(){ alert(this.x); }    //這裏的this指向的是window對象,並非咱們期待的obj,因此會彈出undefined
         , 2000);
    }
};

obj.y();

上面是剛開始遇到的疑問

後來經指點,一段代碼理解問題

jswindow.setTimeout();

解決方法:

...
y.function(){
    var that = this;
    setTimeout(
        function(){
            alert(that.y);  //既然setTimeout指向的是window,咱們把它換了就ok
        }
        ,2000)
}
...

以上代碼摘自: http://www.cnblogs.com/rainman/archive/2009/05/03/1448392.html

前端模塊化的AMD和CMD

網上已經有不少關於這方面的對比。我只寫一下個人理解。

AMD:加載速度快,它是異步加載,預先加載全部資源(這也是缺點?)。

CMD:服務器端模塊的規範,同步加載,加載完後才能執行後面的操做。

AMD通常適用於瀏覽器,CMD則適用於本地或者服務器,例如nodejs就是採用這種模塊化(npm)。

聖盃佈局

初次據說這個,後來網上一搜,原來也就那麼一回事

http://www.elonglau.com/33.html

若是是個人話,我會採用flex了。

Cache-Control

這個只是簡單瞭解,沒作深刻,好的博客推薦看這裏

http://www.cnblogs.com/TankXiao/archive/2012/11/28/2793365.html

主要了解了 HTTP狀態碼

  1. 1XX表示請求接受成功,待進一步處理
  2. 2XX表示訪問成功
  3. 3XX 訪問重定向
  4. 4XX 客戶端請求錯誤,包括語法、文件路徑
  5. 5XX 服務器出現錯誤

常見的有

200訪問成功,302 訪問重定向(google.com轉到google.com.hk),304緩存,404頁面不存在。

我記不住的:

400 Bad Request,請求出現語法錯誤。
403 Forbidden,服務器拒絕請求。
500 服務器發生了不可預知的錯誤
503 服務器當前沒法接受請求,請等待一段時間

304

對於304緩存,主要有兩個標識判斷是否需求請求新的文件:

  1. Etag
  2. 緩存文件的時間和服務器文件最後一次修改的時間

Cache-Control

Cache-Control常見的參數:

  1. public 全部用戶都可使用(緩存在服務器上)
  2. private 單個用戶專用
  3. no-cache 全部頁面都不能緩存
  4. max-age 多少時間不會去訪問服務器

參數能夠參考: http://fanli7.net/a/bianchengyuyan/C__/20130120/294176.html

JavaScript繼承實現

能夠直接看阮一峯老師的文章

http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_...

未寫:

  1. 繼承有好幾種方式(待寫一個YUI繼承方式)
  2. 拖拽實現
  3. JavaScript基礎算法
  4. Javascript動畫算法
相關文章
相關標籤/搜索