1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        每日20道面試題帶解析01 — (1 - 20)

        共 7702字,需瀏覽 16分鐘

         ·

        2021-05-25 13:36

        來(lái)源 | https://www.cnblogs.com/echoyya/p/14518968.html

        以下面試目,本人驗(yàn)證無(wú)誤,查閱了相關(guān)資料,得出解析部分并做了相關(guān)總結(jié),希望對(duì)正準(zhǔn)備跳槽或找工作的你有所幫助!

        1、寫出執(zhí)行結(jié)果

        function side(arr) {  arr[0] = arr[2];}function a(a, b, c) {  c = 10;  side(arguments);  return a + b + c;}a(1, 1, 1);

        答案及解析

        答案 : 21解析 :     1. 調(diào)用 a 函數(shù),abc 都是 1,    2. 后 c 賦值為10,    3. 調(diào) side 函數(shù),參數(shù) arguments對(duì)象,是形參abc的引用,此時(shí) abc 為[1,1,10]     4. 給 arr[0] 賦值,即 a = c = 10,    5. 輸出結(jié)果 10 + 1 + 10 = 21

        2、題一稍加改動(dòng),寫出執(zhí)行結(jié)果

        function side(arr) {  arr[0] = arr[2];}function a(a, b, c = 3) {  c = 10;  side(arguments);  return a + b + c;}a(1, 1, 1);

        答案及解析

        答案 : 12解析 : arguments 中的 c 還是 1,不會(huì)變成10,因?yàn)?a 函數(shù)給了默認(rèn)值,就按ES6的方式解析,ES6有塊級(jí)作用域,所以 c 的值是不會(huì)改變的。

        3、 寫出執(zhí)行結(jié)果

        var min = Math.min();var max = Math.max();console.log(min < max);  //會(huì)是什么?

        答案及解析

        答案 : false解析 : 按常規(guī)思路,應(yīng)該輸出 true,最小值小于最大值,但是卻是false,MDN是這樣解釋的:- Math.min(): 如果沒有參數(shù),結(jié)果為 Infinity (無(wú)窮大)    - Math.max(): 如果沒有參數(shù),結(jié)果為 - Infinity (無(wú)窮小)    console.log(-0.0000000000001 > Math.max())    // true

        4、寫出執(zhí)行結(jié)果,并解釋原因

        var a = 1;(function a(){    a = 2    console.log(a)})()

        答案及解析

        答案 : ? a(){        a = 2        console.log(a)      }解析 : IIFE: Immediately Invoked Function Expression 立即執(zhí)行函數(shù),存在的目的就是為了隔離作用域,防止污染全局命名空間。因此 IIFE 有自己獨(dú)立的作用域,如果函數(shù)名稱與內(nèi)部變量名沖突,就會(huì)永遠(yuǎn)執(zhí)行函數(shù)本身,所以輸出函數(shù)本身了解 :     1. 立即執(zhí)行函數(shù)可以是匿名函數(shù) ;(function(){ var ....})()    2. 開始的第一個(gè)字符使用分號(hào),避免出現(xiàn)代碼壓縮時(shí)產(chǎn)生意外的錯(cuò)誤return reslut;(function(){...})(), 在省略分號(hào)之后,變成return 一個(gè)函數(shù)了    3. 函數(shù)執(zhí)行一對(duì)()的位置: ;(function(){....}())  效果同 ;(function(){....})() 常見為第二種

        5、 寫出執(zhí)行結(jié)果,并解釋原因

        var fullname = 'a';var obj = {   fullname: 'b',   prop: {      fullname: 'c',      getFullname: function() {         return this.fullname;      }   }};
        console.log(obj.prop.getFullname()); // ?var test = obj.prop.getFullname;console.log(test()); // ?

        答案及解析

        答案 : c   a 解析 : 在于運(yùn)行時(shí)的this指向,取決于被誰(shuí)調(diào)用,    1. 第一問:getFullname 是作為obj.prop對(duì)象的方法被調(diào)用,此時(shí)執(zhí)行環(huán)境就是該對(duì)象,即返回 c    2. 第二問:getFullname 被分配給test變量,此時(shí)執(zhí)行環(huán)境是全局對(duì)象,window,即返回 a

        6、寫出執(zhí)行結(jié)果,并解釋原因

        var company = {    address: 'beijing'}var obj = Object.create(company);delete obj.addressconsole.log(obj.address);

        答案及解析

        答案 : c   a 解析 : MDN解釋,Object.create()方法創(chuàng)建一個(gè)新對(duì)象,使用現(xiàn)有的對(duì)象來(lái)提供新創(chuàng)建的對(duì)象的__proto__。Object.create(proto), 其中proto是 新創(chuàng)建對(duì)象的原型對(duì)象。    - obj 通過prototype繼承了company 的address屬性,自己并沒有該屬性,所以delete操作符是沒有作用的    - delete使用原則: 是用來(lái)刪除一個(gè)對(duì)象的屬性,但僅限于在自身的屬性上起作用(不可操作原型上的屬性),若刪除的屬性不存在,那么delete將不會(huì)起作用,但仍會(huì)返回true

        7、寫出執(zhí)行結(jié)果,并解釋原因

        var foo = function bar(){ return 12; };console.log(typeof bar());

        答案及解析

        答案 : 報(bào)錯(cuò) ReferenceError: bar is not defined解析 : 命名函數(shù)表達(dá)式 函數(shù)只能在函數(shù)體內(nèi)有效    var foo = function bar(){         // foo 可用        // bar 可用        console.log(typeof bar); // function    };    // foo 可用    // bar 不可用

        8、 寫出執(zhí)行結(jié)果,并解釋原因

        var x=1;if(function f(){}){    x += typeof f;}console.log(x)

        答案及解析

        答案 : 1undefined解析 : 兩點(diǎn)    1. 函數(shù)聲明在運(yùn)算符中其值為true,但是放在運(yùn)算符中的函數(shù)聲明在執(zhí)行階段是找不到的    2. 未聲明的變量執(zhí)行 typeof 不會(huì)報(bào)錯(cuò),而是返回 undefined 

        9、寫出執(zhí)行結(jié)果,并解釋原因

        function f(){    return f;} console.log(new f() instanceof f);

         答案及解析

        答案 : false解析 :     - a instanceof b 用于檢測(cè) a 是否是 b 的實(shí)例,檢測(cè)的是原型,檢測(cè)過程中會(huì)遍歷 a 的原型鏈,直到找到 b 的 prototype,如果存在返回true 否則返回false    - 本題中return f后,new f()其返回的結(jié)果是 f 的函數(shù)對(duì)象,并不是一個(gè)實(shí)例,因此返回false    - 改動(dòng)一下即可返回true  function f(){}   console.log(new f() instanceof f); // true

        10、寫出執(zhí)行結(jié)果,并解釋原因

        var foo = {    bar: function(){        return this.baz;    },    baz:1}console.log(typeof (f=foo.bar)());

        答案及解析

        答案 : undefined解析 : 將foo.bar 賦值給 f ,相當(dāng)于f(),此時(shí) this 指向 window 

        11、寫出執(zhí)行結(jié)果,并解釋原因

        for (let i = 0; i < 3; i++) {  setTimeout(() => console.log(i), 1);}

        答案及解析

        答案 : 0  1  2解析 : 使用let聲明變量具有塊級(jí)作用域(塊是{}之間的任何內(nèi)容)每次循環(huán) i 將被創(chuàng)建為一個(gè)新值,并且每個(gè)值都會(huì)存在于循環(huán)內(nèi)的塊級(jí)作用域for (var i = 0; i < 3; i++) {  setTimeout(() => console.log(i), 1);}// 3 3 3 由于JS的中的事件執(zhí)行機(jī)制,setTimeout函數(shù)真正被執(zhí)行時(shí),循環(huán)已經(jīng)結(jié)束,由于是使用var聲明的變量 i ,因此該值是全局的,在循環(huán)期間自增,執(zhí)行setTimeout函數(shù)時(shí),i = 3

        12、寫出執(zhí)行結(jié)果,并解釋原因

        const num = {  a: 10,  add() {    return this.a + 2;  },  reduce: () => this.a -2;};console.log(num.add());console.log(num.reduce());

        答案及解析

        答案 : 12  NaN解析 : add 是普通函數(shù),reduce是箭頭函數(shù),對(duì)于箭頭函數(shù)this指向是它所在的上下文環(huán)境(定義時(shí)的位置),意味著調(diào)用reduce時(shí),this指向的并不是num對(duì)象 而是window,且全局并沒有 a 屬性,返回undefinedundefined - 2 返回NaN

        13、 寫出執(zhí)行結(jié)果,并解釋原因

        const person = { name: "Echoyya" };
        function sayHi(age) { return `${this.name} is ${age}`;}console.log(sayHi.call(person, 5));console.log(sayHi.bind(person, 5));

        答案及解析

        答案 : Echoyya is 5 ;         ? sayHi(age) {          return `${this.name} is ${age}`;        }解析 : call, bind方法都可以改變this指向,但是 call方式會(huì)立即執(zhí)行,bind方法返回一個(gè)綁定函數(shù),帶有執(zhí)行上下文,但不會(huì)立即執(zhí)行,需要在調(diào)用一下。

        14、 寫出執(zhí)行結(jié)果,并解釋原因

        ["1", "2", "3"].map(parseInt);

        答案及解析

        答案 : [1, NaN, NaN]解析 : // 以上代碼等同于["1", "2", "3"].map((item, index) => parseInt(item, index));parseInt(string, radix) 解析一個(gè)字符串并返回指定基數(shù)的十進(jìn)制整數(shù)radix是2-36之間的整數(shù),表示被解析字符串的基數(shù)。    - 該參數(shù)省略或其值為 0,則數(shù)字將以 10 為基礎(chǔ)來(lái)解析;    - 如果以 “0x” 或 “0X” 開頭,將以 16 為基數(shù);    - 如果小于 2 或者大于 36,將返回 NaN分步執(zhí)行:parseInt('1',0),parseInt('2',1),parseInt('3',2),由于'3'不屬于二進(jìn)制字符,返回NaN

        15、寫出執(zhí)行結(jié)果,并解釋原因

        [typeof null, null instanceof Object]

        答案及解析

        答案 : ['object'false]解析 :     1. typeof返回一個(gè)表示類型的字符串,typeof null 返回'object'    2. instanceof 用于檢測(cè)constructor.prototype是否存在于參數(shù)object的原型鏈上

        16、寫出執(zhí)行結(jié)果,并解釋原因

        var arr = [0,1];arr[5] = 5;newArr = arr.filter(function(x) { return x === undefined;});console.log(newArr.length);  // ?

        答案及解析

        答案 : 0解析 : filter方法,為數(shù)組中每個(gè)元素調(diào)用一次callback,返回一個(gè)由滿足條件的元素組成的新數(shù)組,callback只會(huì)在已經(jīng)賦值的索引上被調(diào)用,對(duì)于被刪除或未被賦值的索引不會(huì)被調(diào)用, arr[5]=5之后,arr的值為 [0, 1, empty × 3, 5],索引為234的元素沒有初始化,并不存在于數(shù)組中,在callback函數(shù)調(diào)用時(shí)會(huì)跳過,因此沒有一個(gè)元素的值是undefined。

        17、寫出執(zhí)行結(jié)果,并解釋原因

        function showCase(value) {    switch(value) {    case 'A':        console.log('Case A');        break;    case 'B':        console.log('Case B');        break;    case undefined:        console.log('undefined');        break;    default:        console.log('Do not know!');    }}showCase(new String('A'));

        答案及解析

        答案 : Do not know!解析 : switch 是嚴(yán)格比較,String實(shí)例和字符串不一樣    var str1 = 'str';    var str2 = new String('str')    console.log(typeof str1) // 'string'    console.log(typeof str2) // 'object'

        18、寫出執(zhí)行結(jié)果,并解釋原因

        console.log([2,1,0].reduce(Math.pow));  // ?console.log([].reduce(Math.pow));       // ?
        A. 2 報(bào)錯(cuò)B. 2 NaNC. 1 報(bào)錯(cuò)D. 1 NaN

        答案及解析

        答案 : C解析 : reduce(callback, initialValue) 方法參數(shù)callback是一個(gè)回調(diào)函數(shù),并作為累加器,數(shù)組中的每個(gè)值從左到右開始計(jì)算,最終返回一個(gè)值。參數(shù)initialValue是累加器初始值該回調(diào)函數(shù)可接收四個(gè)參數(shù):total  必需。初始值, 或者計(jì)算結(jié)束后的返回值。currentValue 必需。當(dāng)前元素。currentIndex  可選。當(dāng)前元素索引。arr 可選。當(dāng)前元素所屬的數(shù)組對(duì)象。Math.pow 可接收兩個(gè)參數(shù),即前兩個(gè)參數(shù)分步執(zhí)行得到:Math.pow(2,1) => 2 ,Math.pow(2,0) => 1,要有一些數(shù)學(xué)基礎(chǔ)哦,所以第一個(gè)console輸出 1 ,而第二個(gè)console將報(bào)錯(cuò)TypeError: Reduce of empty array with no initial value,原因是:if the array is empty and no initialValue was provided,TypeError would be thrown ,意思是說,若數(shù)組為空且沒有提供initialValue初始值,將會(huì)拋出TypeError

        19、寫出執(zhí)行結(jié)果,并解釋原因

        function Foo() {    Foo.a = function() {        console.log(1)    }    this.a = function() {        console.log(2)    }}Foo.prototype.a = function() {    console.log(3)}Foo.a = function() {    console.log(4)}Foo.a();    // ?let obj = new Foo();obj.a();    // ?Foo.a();    // ?

        答案及解析

        答案 : 4  2  1 解析 :     1. Foo.a():調(diào)用 Foo 的靜態(tài)方法 a,雖然 Foo 中有優(yōu)先級(jí)更高的屬性方法 a,但 Foo 此時(shí)沒有被調(diào)用,所以此時(shí)輸出 Foo 的靜態(tài)方法 a 的結(jié)果:4    2. let obj = new Foo(); 使用 new 方法調(diào)用函數(shù),返回函數(shù)實(shí)例對(duì)象,此時(shí) Foo 函數(shù)內(nèi)部的屬性方法初始化,原型方法建立。    3. obj.a(); 調(diào)用 實(shí)例方法 a,該實(shí)例目前有兩個(gè) a 方法:一個(gè)內(nèi)部屬性方法,一個(gè)原型方法。當(dāng)兩者重名時(shí),內(nèi)部屬性方法優(yōu)先級(jí)更高,會(huì)覆蓋后者,所以輸出2    4. Foo.a(); 根據(jù)第2步可知 Foo 函數(shù)內(nèi)部的屬性方法已初始化,覆蓋了同名的靜態(tài)方法,所以輸出:1

        20、寫出執(zhí)行結(jié)果,并解釋原因

        const value  = 'Value is' + !!Number(['0']) ? 'Echoyya' : 'undefined';console.log(value);

        答案及解析

        答案 : Echoyya解析 :     1.  !!Number(['0']) 返回false    2. + 運(yùn)算符優(yōu)先級(jí) 大于 ? 運(yùn)算符,    所以該題目等價(jià)于 'Value is false' ? 'Echoyya' : 'undefined',而不是 'Value is (false' ? 'Echoyya' : 'undefined') 

          本文完~


        學(xué)習(xí)更多技能

        請(qǐng)點(diǎn)擊下方公眾號(hào)

        瀏覽 58
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久久久久久电影 | 亚洲第一色 | www.色婷婷.com | 91短视频在线看 | 亚洲视频在线观看视频 | 18禁无套内射 | 精品国产麻豆 | 精品二区在线 | 包你爽综合网 | 女人15一17毛片 |