前端開發面試題收集(js部分)


1.問:js中"1"+2+"3"+4 運算結果是?

答:1234

js中,字符串和數值相加,得到的還是字符串,這里的結果1234也是字符串。

2.問:4+3+2+"1"  運算結果是?

答:91 (從左至右的運算,前面是數值相加得到9,再和字符串相加得到91字符串。)

3.問:以下代碼中,結果是?

var foo = 1;
function bar() {
    foo = 10;
    return;
    function foo() {}
}
bar();
alert(foo);

答:將輸出1.  (這里訪問的是window.foo,而不是bar里面的foo)

4.問:以下代碼中,結果是?

function bar() {
    return foo;
    foo = 10;
    function foo() {}
    var foo = 11;
}
alert(typeof bar());

答:將輸出function.(var foo = 11 雖然定義放在后面,但是變量會提升,所以最后的結果是function)

5.問:以下代碼中,結果是?

var x = 3;
var foo = {
    x: 2,
    baz: {
        x: 1,
        bar: function() {
            return this.x;
        }
    }
}
var go = foo.baz.bar;
alert(go()); 
alert(foo.baz.bar());

答:3,1.

go = foo.baz.bar; go()此時this指向的是widow. window.x的值是3;foo.baz.bar()此時this指向的是baz,baz.x的值是1.

6.問:以下代碼中,結果是?

var x   = 4,
    obj = {
        x: 3,
        bar: function() {
            var x = 2;
            setTimeout(function() {
                var x = 1;
                alert(this.x);
            }, 1000);
        }
    };
obj.bar();

答:輸出4.

setTimeout方法是掛在window對象下的。setTimeout(匿名函數,time),這里的匿名函數形成了一個閉包,從而能訪問到外層函數的局部變量。也就是window中的x。(參考

7.問:以下代碼中,結果是?

x = 1;
function bar() {
    this.x = 2;
    return x;
}
var foo = new bar();
alert(foo.x);

答:輸出2.

這里的this指向的是bar的對象實例。

8.問:以下代碼中,結果是?

function foo(a) {
    alert(arguments.length);
}
foo(1, 2, 3);

答:3.

9.問:以下代碼中,結果是?

var foo = function bar() {}; 
alert(typeof bar);

答:undefined

10.問:以下代碼中,結果是?

var arr = [];
arr[0]  = 'a';
arr[1]  = 'b';
arr.foo = 'c';
alert(arr.length);

答:2, 輸出arr的值是["a", "b"],不是很懂這里的結果。

11.問:以下代碼中,結果是?

function foo(a) {
    arguments[0] = 2;
    alert(a);
}
foo(1);

答:2

12.問:以下代碼中,結果是?

function foo(){}
delete foo.length;
alert(typeof foo.length);

答:number;foo.length的值還是0。delete無法刪除,參考

13.問:以下代碼中,

var name="the window";
var object={
  name:
"my object",
  getName:
function(){
    return this.name;
  } }

通過以下調用

object.getName(); 
(object.getName)();
(object.getName = object.getName)()

結果是?

答:

第一行的代碼,this指向的就是object,所以毫無疑問;第二行代碼雖然加上括號,就好像只是在引用一個函數,但this的值得到了維持。因為object.getName和(object.getName)的定義相同。第三行代碼,先執行一條賦值語句,然后再調用賦值后的結果。因為這個賦值表達式的值是函數本身,所以this的值不能得到維持,結果就返回the window.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM