日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

有意思的前端函数面试题

發布時間:2025/3/20 HTML 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有意思的前端函数面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1:考引用類型在比較運算符時候 隱式轉換會調用本類型那個方法 toString和valueOf?(去年過年吵的很火國外的題)

if(a == 1 && a == 2 && a == 3){console.log("我走進來了"); }<!--答案1:--> var a = {num:0}; a.valueOf = function(){return ++a.num }<!--答案2:--> var num = 1; function a(){return num++; } if(a() == 1 && a() == 2 && a() == 3){console.log("我走進來了"); }<!--答案3:-->var num = 0; Function.prototype.toString = function(){return ++num; } function a(){}<!--答案4:--> var a = {[Symbol.toPrimitive]: ((i) => () => ++i) (0)};復制代碼

2:考this指向的理解?(最后一個輸出問題是借鑒網易面試題的)

var names = "宋偉老師"; var obj = {names:"張健老師",showName:function(){console.log(this.names);},returnName:function(){return this.names;},returnFunctionName:function(){return function(){console.log(this.names);}}} obj.showName(); //輸出什么? "張健老師" obj.returnName(); //輸出什么? "張健老師" obj.returnFunctionName()(); //輸出什么? "宋偉老師" obj.showName.call(names); //輸出什么? undefined obj.returnName.call(names); //輸出什么? undefined obj.returnFunctionName().call(names) //輸出什么? undefined var newObj = obj.returnFunctionName().bind(window); newObj.call(obj) //輸出什么? "宋偉老師" //為什么最后一個輸出"宋偉老師"?因為bind指向this對象后 再一次調用的話 this指向不會被改變//謝謝某同學慧眼發現了問題 name少了個s 統一都是names 復制代碼

3:再來一次this指向問題?(能不看答案的同學說出結果 算我輸)

var big = "萬達老師";var obj = {big:"宋偉老師",showBig:function(){return this.big;} } obj.showBig.call(big); //? big() { [native code] } //精通String的操作方法的同學就把為什么回復出來吧復制代碼

4:說出下面this長度是多少?(再來一把this指向 估計能把這都搞明白的同學 this指向應該沒有能難住的了)

function a(a,b,c){console.log(this.length); //4console.log(this.callee.length); //1 }function fn(d){arguments[0](10,20,30,40,50); }fn(a,10,20,30);//第一個輸出結果:因為this當前指向的是arguments 。 arguments是一個偽數組具備length屬性。arguments又是保存函數的實參。 fn調用的時候傳入4個實參。所以arguments長度為4。這個時候arguments[0] 等同于 arguments.a調用這個函數。所以this指向的是arguments這個偽數組也是(對象)(聽到這還有疑惑小伙伴留言問我)//第二個輸出結果:callee是arguments的一個屬性,主要返回當前arguments直屬的函數體。所以this.callees是返回fn 。每一個函數有一個length屬性主要用來返回函數的形參的所以就是1。 復制代碼

5:經典的變量提升問題?

=================== 題一 =========================== if(!"abc" in window){var abc = 10; } console.log(abc); //undefined //因為先變量聲明提升 所以提升之后abc的值系統默認會賦值為undefined。 !abc為false ,in是檢查對象中是否存在某個屬性。很顯然 false屬于是一個布爾類型。不存在對象中。所以沒有走if里面的變量賦值。//對于wens同學提出的問題。我重新說明一下abc雖然聲明提升了。 但是 if里面判斷的是字符串abc。所以!"abc"false。 你可以嘗試if(!"abc"){var abc=10} console.log(abc); 再試試if(!abc){var abc=10} console.log(abc);看看結果是否一樣=================== 題二 =========================== console.log(a); //undefined if(!("a" in window)){var a = 10; } console.log(a); //undefined //因為先變量聲明提升 所以提升之后a的值系統默認會賦值為undefined。 變量提升會存在GO中也就是window。所以("a" in window)肯定為true。!去反一下就為false。所以不走賦值。 =================== 題三 =========================== var x = 1; if (function f(){}) { x += typeof f; } console.log(x); //1undefined //因為函數題在()中會以表達式去運行。最后轉換為true,不會存在函數整體聲明提升。所以typeof為undefined復制代碼

6:面試幾率百分80%的題!

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); //輸出什么 undefined 0 0 0 var b = fun(0).fun(1).fun(2).fun(3); //輸出什么 undefined 0 1 2 var c = fun(0).fun(1); c.fun(2); c.fun(3); //輸出什么 undefined 0 1 1//答案很顯而易見。換一個形式看著道題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); //輸出什么 undefined 0 0 0 //fun(0)調用時候等同于 function fun(n,o) {var n=0;var o;console.log(o) //undefinedreturn {fun:function(m){return fun(m,n); ---> n 就獲取到fun里面的n為0的值。然后調用一次fun就會出現下面函數顯示。}}; } //a.fun(1)調用時候等同于fun(1,0) function fun(n,o) {var n=1;var o=0;console.log(o) //1return {fun:function(m){return fun(m,n); ---> n 就獲取到fun里面的n為0的值。}}; }//以此類推 不知道小伙伴們看懂沒 因為感覺語言解釋不如分化代碼理解好明白 復制代碼

總結

以上是生活随笔為你收集整理的有意思的前端函数面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。