獻上一套今年的騰訊前端筆試題給你們瞧瞧

一、請寫出下面 JS 程序中幾個 alert 的結果:php

var a = 100;
function fn() {
    alert(a);
    var a = 200;
    alert(a);
}
fn();
alert(a);
var a;
alert(a);
var a = 300;
alert(a);

本身去控制檯敲敲就知道了哈前端

二、請寫出如下程序的輸出正則表達式

var obj1 = {name: 'obj1', fn: function() {
    document.write(this.name);
}};
var obj2 = {name: 'obj2'};
var obj3 = {name: 'obj3'};
obj1.fn();
var newFn = obj1.fn;
newFn();
newFn.call(obj2);
obj3.fn = newFn;
obj3.fn();

本身去控制檯敲敲就知道了哈算法

三、一個數組 par 中存放有多我的員的信息,每一個人員的信息由年齡 age 和姓名 name 組成,如{age: 2, name: 'xx'}。請寫一段 JS 程序,對這個數組按年齡從小到大進行排序。json

我這邊以下實現:跨域

function parSort(par) {
    return par.sort(function(arr1, arr2) {
        return arr1.age > arr2.age ? -1 : 1;
    });
}

四、有字符串 var = 'abc345efgabcab',請寫出 3 條 JS 語句分別實現以下 3 個功能:
1)去掉字符串中的a、b、c 字符,造成結果:'345efg'
2)將字符串中的數字用中括號括起來,造成結果:'abc3[5]efgabcab'
3)將字符串中的每一個數字的值分別乘以 2,造成結果:'abc6810efgabcab'數組

我這邊以下實現:閉包

// 1)
str.replace(/([a-c])/g, '');
// 2)
str.replace(/(\d)/g, '[$1]');
// 3)
str.replace(/(\d)/g, function(num) {return num*2;});

五、請寫一段 JS 程序類,定義一個列表類List,該類包含兩個成員:屬性 length(表示列表中的元素個數)和方法 add (像列表中添加元素),其中要求構造函數和 add 方法的參數爲動態參數。架構

我這邊以下實現:框架

function List() {
    this['_data'] = [];
    for (var ele in arguments) {
        this._data.push(arguments[ele]);
    }
    this.length = this._data.length;
}

List.prototype = {
    construct: List,
    add: function() {
        for (var ele in arguments) {
            this._data.push(arguments[ele]);
        }
        this.length = this._data.length;
    }
}

六、請問之前 JS 程序有什麼問題?應該如何優化?

function setStyle(element) {
    element.style.fontWeight = "bold";
    element.style.textDecoration = "none";
    element.style.color = "#000000";
}

我這邊優化以下:

function setStyle(element) {
    if (!element.style) {
        return;
    }
    var eleStyle = element.style;
    eleStyle.fontWeight = "bold";
    eleStyle.textDecoration = "none";
    eleStyle.color = "#000000";
}

七、請寫出一下正則表達式:
1)匹配一個所有是數字的字符串
2)提取一個 url 所使用的協議類型如 http、ftp 和 host 名稱

我這邊實現以下:

// 1)
var str = '1234';
/^\d+$/.test(str);
// 2)
var str = 'http://yangbai.me';
str.match(/(([a-zA-Z]{3,5})\:\/\/)?(www\.)?([a-zA-Z\_\-]+)\.([a-zA-Z]+)$/);

八、請使用閉包的方式,寫一段 JS 程序實現以下功能:函數每調用一次則該函數的返回值加 1。

我這邊以下實現:

function A() {
    var count = 0;
    function B() {
        count++;
        return count;
    }
    return B;
}

var plus = A();
//A中的count會一直停留在內存中。。。
plus();// 0
plus(); // 1
plus(); // 2

九、請寫出下面 JS 程序中幾個 document.write 的結果:

function Parent() {
    this.a = 1;
    this.b = [1, 2, this.a];
    this.c = {demo: 5};
    this.show = function() {
        document.write(this.a + ' ' + this.c.demo + ':' + this.b + '<br/>')
    }
}
function Child() {
    this.a = 2;
    this.change = function() {
        this.b.push(this.a);
        this.a = this.b.length;
        this.c.demo = this.a++;
    }
}
Child.prototype = new Parent();
var parent = new Parent();
var child1 = new Child();
var child2 = new Child();
child1.a = 11;
child2.a = 12;
parent.show();
child1.show();
child2.show();
child1.change();
child2.change();
parent.show();
child1.show();
child2.show();

我這邊打印以下:

1 5:1,2,1
11 5:1,2,1
12 5:1,2,1
1 5:1,2,1
5 5:1,2,1,11,12
6 5:1,2,1,11,12

十、請簡述對 MVC 的理解,並列舉一些 MVC 架構的 js 框架。

來吧,各抒己見......

十一、請用 js 程序實現二分算法。

我這邊以下實現:

/**
 * 簡單二分查找實現【數組必須有序】
 * @param  {[type]} arr   [description]
 * @param  {[type]} num   [description]
 * @param  {[type]} start [description]
 * @param  {[type]} end   [description]
 * @return {[type]}       [description]
 */
function binaryFind(arr, num, start, end) {
    start = start || 0;
    end = end || arr.length;
    var mid = Math.floor((start + end) / 2);
    var midVal = arr[mid];
    if (start >= end) {
        return false;
    }
    if (midVal === num) {
        return 'arr[' + mid + '] = ' + midVal;
    } else {
        if (midVal > num) {
            return binaryFind(arr, num, 0, mid);
        } else {
            return binaryFind(arr, num, mid+1);
        }
    }
}

十二、有這樣一個 URL:http://vip.qq.com/a.php?a=1&b...,請寫一段 JS 程序提取 URL 中的各個參數(參數名和參數個數不肯定),將其按 key-value 形式返回到一個 json 結構中,如{a:'1',b:'2',c:'',d:'xxx',e:undefined}。

我這邊實現以下:

/**
 * 解析url參數爲對象 
 * @param  {[type]} url [description]
 * @return {[type]}     [description]
 */
function parseUrl(url) {
    url = url.toString();
    var ret = {};
    var urlArr = url.split('?');
    if (urlArr.length < 2) {
        return ret;
    }
    var paramsArr = urlArr[1].split('&');
    var len = paramsArr.length;
    for (var i=0; i<len; i++) {
        var arr = paramsArr[i].split('=');
        ret[arr[0]] = arr.length > 1 ? arr[1] : undefined;
    }
    return ret;
}

1三、XSS 原理是什麼?怎麼防範呢?請寫一個攻擊和防護的例子。CSRF 和 hash 碰撞的原理是什麼。怎麼防範。

來吧,各抒己見......

1四、請列舉前端能夠採起的常見優化方式

來吧,各抒己見......

1五、請列舉你所瞭解的跨域實現方法

來吧,各抒己見......

相關文章
相關標籤/搜索