前端面试题

391 阅读4分钟
原文链接: blog.csdn.net

第一题

var a = 2;
var func = (function () {
    var a = 3;
    return function () {
        a++;
        console.log(a);
    }
})();
func(); //->4
func(); //->5

第二题

console.log(1 && 2); //->2
console.log(1 || 2); //->1

第三题

window.val = 1;
var json = {
    val: 10,
    dbl: function () {
        this.val *= 2;
    }
}
json.dbl(); //json.val=20
var dbl = json.dbl;
dbl(); //window.val=2
json.dbl.call(window); //window.val=4
console.log(window.val + json.val); //4+20=24

第四题

(function () {
    var val = 1;
    var json = {
        val: 10,
        dbl: function () {
            val *= 2;
        }
    };
    json.dbl(); //val=2
    console.log(json.val + val); //10+2=12
}());

第五题

var foo = "hello";
(function () {
    var bar = "world";
    console.log(foo + bar); //helloworld
})();
console.log(foo + bar); //bar is not defined

第六题

var foo = {
    n: 1
};
var bar = foo;
foo.x = foo = {
    n: 2
};
console.log(foo.x); //undefined

题七题

console.log("one");
setTimeout(() => {
    console.log("two");
}, 0);
console.log("three");
//one three two

第八题

var a = 1;
function func() {
    console.log(a);
    var a = "in function"
}
func(); //undefined
console.log(a); //1

第九题

(function () {
    var a = b = "res";
})();
console.log(b); //res
console.log(a); //a is not defined

第十题

function func1() {
    var n = 99;
    nAdd = function () {
        this.n += 1;
        console.log(this.n);
    };

    function func2() {
        console.log(n);
    }
    return func2;
}
var result = func1();
result(); //99
nAdd(); //NaN
result(); //99

第11题

var obj = {
    name: "obj",
    dose: function () {
        this.name = "dose";
        return function () {
            return this.name;
        }
    }
}
console.log(obj.dose().call(this)); //undefined

第12题

var myObject = {
    foo: "bar",
    func: function () {
        var self = this;
        console.log("outer func | this.foo" + this.foo); //bar
        console.log("outer func | self.foo" + self.foo); //bar
        (function () {
            console.log("inner func | this.foo" + this.foo); //undefined
            console.log("inner func | self.foo" + self.foo); //bar
        })();
    }
};
myObject.func();

第13题

var k = c = 0;
function a(n) {
    return n ? (n - 1) * a(n - 1) : n;
    k++;
    c++;
    if (c > 10) return c;
}
console.log(a(5)) //0
console.log(k) //0
console.log(c) //0

第14题

function cc(i) {
    if (i == 3) {
        i += 2
    };
    if (i == 5) {
        i--
    };
    if (i == 4) {
        i -= 2
    };
    return i;
}

for (var i = 2; i < 6; i++) {
    console.log(cc(i)) //2 2 2 2
}

第15题

var fullname = "John";
var obj = {
    fullname: "Colin",
    prop: {
        fullname: "Aurelio",
        getFullname: function () {
            return this.fullname;
        }
    }
};
console.log(obj.prop.getFullname()); //Aurelio
var test = obj.prop.getFullname;
console.log(test()); //undefined

第16题

var x = 1,
    y = z = 0;

function add(n) {
    return n = n + 2;
}
y = add(x);
console.log(y); //4

function add(n) {
    return n = n + 3;
}
z = add(x);
console.log(z); //4

第17题

(function () {
    var x = y = z = 1;
}())
console.log(x); //ReferenceError: x is not defined
console.log(y); //1
console.log(z); //1

第18题

function Foo() {
    var i = 0;
    return function () {
        console.log(i++);
    }
}
var f1 = Foo(),
    f2 = Foo();
f1(); //0
f1(); //1
f2(); //0

第19题

function test() {
    console.log(a); //undefined
    console.log(foo()); //2
    var a = 1;

    function foo() {
        return 2;
    }
}
test();

第20题

var obj = {
    escape: function (str) {
        return str.replace("a", "b");
    },
    func: function () {
        for (var i = 0; i < 3; i++) {
            var str = "a";
            setTimeout(function () {
                str = str + "a";
                console.log(this.escape(str));
            }, i * 1000);
        }
    }
}
obj.func(); //aa aaa aaaa

第21题

function t(a) {
    var a = "hello";
    console.log(a); //hello

    function a() {
        console.log(null);
    }
    console.log(a); //hello
}
t(null);

第21题

function fn(b) {
    console.log(b); //function b() {console.log(b);}

    function b() {
        console.log(b); //function b() {console.log(b);}
    }
    b();
}
fn(10);

第22题

function a(b) {
    console.log(b); //undefined
    b = function () {
        console.log(b); //function () {console.log(b);};
    };
    b();
}
a();

第23题

var a = 1;

function b() {
    var a = 2;

    function c() {
        console.log(a);
    }
    return c;
}
b()();  // 2

第24题

var a = 100;
function test() {
    console.log(a); //100
    a = 10;
    console.log(a); //10
}
test();
console.log(a); //10

第25题

var a = 100;
function test() {
    console.log(a); //undefined
    var a = 10;
    console.log(a); //10
}
test();
console.log(a); //100

第26题

var a = 10;

function test() {
    a = 100
    console.log(a); //100
    console.log(this.a) //undefined
    var a;
    console.log(a); //100
}
test();
console.log(a); //10

第27题

var a = (function () {
    var i = 0;
    return {
        aa: function () {
            i++;
            console.log(i);

        },
        bb: function (i) {
            console.log(i);
        }
    }
})()
console.log(a) //{ aa: [Function: aa], bb: [Function: bb] }
console.log(a.bb(5)) //5 undefined
console.log(a.bb) //[Function: bb]

第28题

var TestFunc = function () {
    console.log(1);
    for (var i = 0; i < 5; i++) {
        var t = i;
        setTimeout(function () {
            console.log(t);
        }, i * 100)
    }
    console.log(2);
}
TestFunc(); //1 2 4 4 4 4 4

第29题

var TestFunc = function () {
    console.log(1);
    for (var i = 0; i < 5; i++) {
        setTimeout(function () {
            console.log(i);
        }(), i * 100)
    }
    console.log(2);
}
TestFunc(); //1 0 1 2 3 4 2

第30题

var obj = {
    name: "AAA"
};
var testFun = function (obj) {
    var newObj = obj;
    newObj.name = "BBB";
    newObj.type = "new";
    console.log(newObj);
    console.log(obj);
}
console.log(obj); //{name: "AAA"}
testFun(obj); //{name: "BBB", type: "new"} {name: "BBB", type: "new"}
console.log(obj); //{name: "BBB", type: "new"}

第31题

var a = 3;
(function () {
    console.log(++a); // NaN
    var a = 5;
    console.log(++a); // 6
})()

第32题

for (var i = 0; i < 10; i++) {
    setTimeout(function () {
        console.log(i);
    }, 0);
}
// 10 10 10  10 10 10 10 10 10 10

第33题

var z = 10;

function foo() {
    console.log(z);
}
(function (funArg) {
    var z = 20;
    funArg();
})(foo);
// 10

第34题

var data = [];
for (var k = 0; k < 3; k++) {
    data[k] = function () {
        console.log(k);
    };
}
data[0](); // 3
data[1](); // 3
data[2](); // 3

第35题

function fun(n, o) {
    console.log(o);
    return {
        fun: function (m) {
            return fun(m, n);
        }
    };
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
console.log(a); //{ fun: [Function: fun] }
console.log(b); //{ fun: [Function: fun] }
console.log(c); //{ fun: [Function: fun] }

第36题

var a = 100;

function testResult() {
    var b = 2 * a;
    var a = 200;
    var c = a / 2;
    console.log(b); //NaN
    console.log(c); //100
}
testResult();

第37题

var tt = "aa";

function test() {
    console.log(tt); //undefined
    var tt = "dd";
    console.log(tt); //dd
}
test();

第38题

var test = (function (a) {
    this.a = a;
    return function (b) {
        return this.a + b;
    }
}(function (a, b) {
    return a;
}(1, 2)));
console.log(test(1)); //2

第39题

(function () {
    var a = b = 3;
})();
console.log("a defined?" + (typeof a !== "undefined")); //false
console.log("b defined?" + (typeof b !== "undefined")); //true

第40题

var myObject = {
    foo: "bar",
    func: function () {
        var self = this;
        console.log("outer func: this.foo=" + this.foo); //bar
        console.log("outer func: self.foo=" + self.foo); //bar
        (function () {
            console.log("inner func: this.foo=" + this.foo); //undefined
            console.log("inner func: self.foo=" + self.foo); //bar
        }());
    }
};
myObject.func();

第41题

(function () {
    console.log(1);
    setTimeout(function () {
        console.log(2)
    }, 100);
    setTimeout(function () {
        console.log(3)
    }, 0);
    console.log(4);
})();
// 1 4 3 2

第42题

var len = 4;
while (len--) {
    setTimeout(function () {
        console.log(len)
    }, 300);
    console.log(len);
}
// 3 2 1 0 -1 -1 -1 -1

第43题

window.name = "Window";
var cat = {
    name: "Cat"
};
var dog = {
    name: "Dog",
    sound: function (word) {
        console.log(this.name + word);
    }
};
dog.sound("is pooping"); // Dogis pooping
dog.sound.call(window, "is banking"); //Windowis banking
dog.sound.call(dog, "is banking"); //Dogis banking
dog.sound.apply(cat, ["miaowing"]); //Catmiaowing

第44题

for (var i = 0, j = 0; i < 10, j < 6; i++, j++) {
    value = i + j;
}
console.log(value); // 10

第55题

if (!("a" in window)) {
    var a = 1;
}
console.log(a); //undefined

第56题

var handle = function (a) {
    var b = 3;
    var temp = function (a) {
        b = a + b;
        return temp;
    }
    temp.toString = function () {
        return b;
    }
    return temp;
}
console.log(handle(4)(5)(6)); //{ [Function: temp] toString: [Function] }