前端常見面試題總結part2

今天總結了幾道,感受很是有意思的題,有感興趣的能夠看下,有疑問請留言~
(答案在最後)函數

  1. 考察自執行函數的this指向
    審題要細心
var n = 2,
        obj = {
            n:2,
            fn:(function(n){
                n*=2;
                this.n+=2;
                console.log(this.n);
                console.log(window.n);
                return function(m){
                    this.n*=2;
                    console.log(m+(++n))
                }
            }(n)
        };
    var fn = obj.fn;
    fn(3);
    obj.fn(3)
    console.log(n,obj.n);
  1. prototype:原型屬性
    __proto__: 原型鏈屬性
    hasOwnProperty:檢測屬性是否屬於當前對象私有屬性
function Fn() {
            var n = 100;
            this.AA = function () { }
            this.BB = function () { }
        }
        Fn.prototype.AA = function () { }
        var f1 = new Fn();
        var f2 = new Fn;
        console.log(f1.n);
        console.log(f1.AA === f2.AA);
        console.log(f1.__proto__.AA === f2.AA)
        console.log(f1.__proto__.AA === f2.__proto__.AA)
        console.log(f1.__proto_.AA === Fn.prototype.AA)
        console.log(f1.hasOwnProperty('AA') === Fn.prototype.hasOwnProperty('AA'));
  1. 比較簡單的一道題this

    console.log(a);
        a = 20;
        function fn(){
            console.log(a)
            var a = 12;
        }
        fn();
        console.log(a)
  2. 考察變量提高prototype

    var  foo = 1;
        function fn(){
            if(!foo){
                var foo = 12;
            }
            console.log(foo);
        }
        fn();

    5) 函數形參變量和arguments存在映射
    函數默認返回undefinedcode

    var a = 4;
        function test(x,y,a){
            console.log(a);
            arguments[2] = 100;
            console.log(a)
        }
        a = test(1,2,3);
        console.log(a)

    6) 函數形參變量和arguments映射創建在函數執行形參賦值的一刻
    形參和實參一一對應,多出來的不創建映射對象

    function fn(x,y){
            var arg = arguments;
            arg[0] = 100;
            var y = 200;
            arg[1] = 300;
            console.log(y);
        }
        fn(20);
    7) 邏輯與 邏輯或
console.log(0||1&&2||0||3&&2||1)

8) 仍是考察this原型鏈

var num = 10;
    var obj = {num:20};
    obj.fn = (function(num){
        num = this.num + 10;
        this.num = num + 10;
        return function(){
            this.num += ++num;
        }
    })(num)
    var fn = obj.fn;
    fn();
    obj.fn();
    console.log(num,obj.num)

9) 很長的一段
function Fn(){ this.x = 100; this.y = 200; this.getX = function(){ console.log(this.x) } } Fn.prototype.getX = function(){ console.log(this.x) } Fn.prototype.getY = function(){ console.log(this.y) } var f1 = new Fn; var f2 = new Fn; console.log(f1.getX === f2.getX); console.log(f1.getY === f2.getY); console.log(f1.__proto__getY === Fn.prototype.getY); console.log(f1.__proto__.getX === f2.getX); console.log(f1.getX === Fn.prototype.getX); console.log(f1.constructor); console.log(Fn.prototype.__proto__.constructor); f1.getX(); f1.__proto__.getX(); f2.getY(); Fn.prototype.getY();
10)仍是this得問題(發現了好多this的題)
var name = 'window'; var Tom = { name:'Tom', show:function(){ console.log(this.name) }, wait:function(){ var fun = this.show; fun(); } } Tom.wait();
答案:get

1) 9
10
8 6
2) undefined
false
false
true
true
true
3) a is not defined
4) 12
5) 3
100
undefined
6) 200
7) 2(邏輯與的優先級高於邏輯或)
8) 51 42
9) false
true
true
false
false
Fn
Object
100
undefined;this:f1.__proto__ ,上面沒有x,因此是undefined
200
undefined;this:Fn.prototype,上面沒有y,因此是undefined
10) window原型

相關文章
相關標籤/搜索