函式面試題

2021-10-02 19:14:52 字數 2460 閱讀 6108

面試題的理解文件

第一題:

var num;

function fun()

num = 18;

fun();

理解:

結果是undefined,但是num的值為18,函式裡面的num的值為20,這串**是由上到下的循序執行的,而這裡的num如果在函式裡面則會去找自己裡面的,如果有則會使用自己裡面的num,如果沒有則會去父級裡面去找直到找到然後使用的而賦值則會留在原地。

第二題:

var a = 18;

f1();

function f1()

var a;

function f1()

a = 18;

f1();

var a=18;

function f1()

f1();

理解:

這裡最後的答案是18,在程式執行之前會在window的go裡面會把var定義的和function定義的給提前,這裡var定義的只會把變數提前而賦值則會留在原地,而function定義的方法則會把整個方法提前知道方法呼叫時,如果方法的名字重複的話則後者會把前者的方法體給覆蓋,而這裡的a則是全域性變數則這裡的輸出在fl的方法體裡面的,而這個方法體裡面沒有a則會使用全域性裡面的a變數。

第三題:

function f1()

f1();

console.log(c);

console.log(b);

console.log(a);

理解:

在這裡最終的答案是:9 9 9 9 9 報錯

在這裡就是在這個裡面a,b,c,在這裡a是區域性變數,而b和c則是全域性變數,所以後面的在外面的輸出的語句前兩句沒有影響的輸出,而在輸出的a的時候由於在全域性作用域裡面找不到所以會報錯

第四題:

var a=18;

f1();

function f1()

理解:

這裡的答案是:undefined 9

因為這裡呼叫了fl的這個方法,而在這裡面有a和b變數也是同樣的原理,var和function提前賦值留在原地,所以就是這樣得到的值。

第五題:

var x = ;

var output = (function())();

console.log(output);

理解:

輸出是 undefined。x雖然是全域性變數,但是它是乙個object。delete作用在x.foo上,成功的將x.foo刪去。所以返回undefined

第六題:

var employee = 

var emp1 = object.create(employee);

delete emp1.company

console.log(emp1.company);

理解:

輸出是 xyz,這裡的 emp1 通過 prototype 繼承了 employee的 company。emp1自己並沒有company屬性。所以delete操作符的作用是無效的。

第七題:

var test = ,

};console.log (test.func()); // 42

理解:

因為此時 this 找不到呼叫者,所以預設就為 window 物件 所以輸出結果為42。

第八題:

function fn() 

fn() // this指向 window

const obj =

}obj.getname() // this指向 obj

理解:

箭頭函式中的this是外部作用域的this,解決了之前要快取this的弊端。

第九題:

var name = 'window'

function closure() ,

set_name: function(value)

}}var result = closure();

console.log(result.get_name());

result.set_name('syj');

console.log(result.get_name());

理解:

最後的輸出結果是init syj

在後面第乙個輸出的是result.get_name(),而在前面定義了乙個變數接收了乙個名為closure()這個方法,所以result這個也是乙個與之一樣的方法,所以在這裡用這個result來點get_name這個屬性,而這個屬性裡面返回的是name而這個則會去找父級裡面的name而父級裡面的name的值為init,而第二個輸出語句剛好給set_name這個屬性裡面傳了乙個引數而這個引數剛好更改了name的值,所以再輸出的值則會變成syj

函式面試題

var a 1 function b b console.log a 輸出 1 解析 輸出的a是window下的 function foo return bar function bar alert foo 輸出 8 解析 涉及預編譯問題,兩個方法名同名,後宣告的覆蓋之前的所以這裡輸出8 funct...

虛函式面試題

classa classb int tmain intargc,tchar argv 情況a 不是虛函式 輸出hello world,程式執行正常 情況b 有虛函式 程式直接crash 原因是 不是虛函式的情況,this指標當成第乙個引數傳入函式 一般是通過ecx暫存器 主要裡面沒有使用這個this...

js函式面試題

一var name the window var object alert object.getnamefunc 題中有兩個alert輸出,我們首先看第乙個alert,這個alert所在的函式是在最後乙個alert裡面被呼叫的,呼叫的時候,裡面的this指向的是object,所以是在object裡面...