js 面試題

zhengyeye發表於2016-06-27

1.用原生js,建立一個無序列表新增到body中,ul下包含5個li,每個li包含一個text型別元素,text元素內容可自定義;

<script type="text/javascript">
    window.onload = function() {
        var ulNode = document.createElement("ul");
        var bodyNode = document.getElementsByTagName("body");
        bodyNode[0].appendChild(ulNode);
        for (var i = 0; i < 5; i++) {
            var liNode = document.createElement("li");
            var textNode = document.createTextNode("我是文字節點"+i);
            liNode.appendChild(textNode);
            ulNode.appendChild(liNode);
        }
    }
</script>

執行結果:

知識點:

(1)在原生js中,window.onload  當頁面載入的時候可以呼叫某些函式(http://www.jb51.net/article/43166.htm)

window.onload = function() { 
    ... 
} 

(2)建立新的節點:

document.createElement("div");// 定義新的div元素節點變數 

(3)建立文字節點

document.createTextNode() ;//可建立文字節點

(4)向節點新增最後一個子節點

 appendChild() 

 2.

(function(){ 
  return typeof arguments; 
})();

參考答案:

arguments是物件,偽陣列有兩件事要注意這裡:
引數不是陣列,它是一個陣列一樣的物體,你可以使用方括號和整數索引的元素,但方法通常可在一個如推上不存在引數陣列
Array.prototype.slice.call(arguments); 轉成陣列
當然arguments即使是陣列,返回的依然是"object",因為陣列也是物件,附加:typeof 對型別的判斷
https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Operators/typeof

// "object"

3.

var f = function g(){ return 23; }; 
typeof g();

參考答案:

function g(){ return 23; }是函式表示式,事實上只是一個名字,不是一個函式宣告
函式實際上是繫結到變數f,不是g.
指定的識別符號在函式表示式雖然有其用途:堆疊跟蹤是清晰而不是充斥著無名的函式,你可以有一個匿名函式遞迴呼叫本身不使用argument.callee
附非常詳細的帖子函式表示式
http://kangax.github.io/nfe/

//會發生錯誤

 

相關文章