js知識梳理5 關於函式的要點梳理 1

2021-09-13 13:12:12 字數 1728 閱讀 1774

函式宣告具有宣告提前/宣告提公升的特性,這一點和變數的宣告特性相似,執行**之前會先讀取函式宣告和變數宣告,意味著可以把函式宣告放在呼叫它的語句後面,但變數宣告肯定最好不要這樣,因為常伴隨undefined問題。

函式宣告的函式名稱和函式體都提前,而函式表示式只是變數宣告提前(而變數的初始化**仍然在原來的位置)。

構成函式主體的**定義時並不會執行,呼叫函式時才會執行,有4中方式呼叫函式:

①作為函式呼叫的注意點,嚴格模式下呼叫上下文是undefined,所以通常不使用this關鍵字,②作為方法呼叫的話呼叫上下文就是方法所在的物件,this關鍵字引用著該物件。③而巢狀函式不會從呼叫它的函式中繼承this,如果想訪問外部的this,可以用變數儲存this的值。④構造函式呼叫會使用新建立的物件作為呼叫上下文。

當傳入的實參比函式宣告時指定的形參數量要少,剩下的形參都將設定為undefined值(實參多則會自動省略)。所以在合適的場景就可以選擇使用可選形參:

function getpropertynames(o, /* optional */ a) 

var arr = [1,2];

//[1, 2, "x", "y"]

console.log(getpropertynames(,arr));

//["x", "y"]

console.log(getpropertynames());

注意點:需要將可選形參放在形參列表的最後,並在函式定義是使用注釋強調形參是可選的。

在函式體內,識別符號arguments是指向實參物件的引用,它是乙個類陣列物件,可以通過數字下標訪問傳入的實參值,這樣函式就可以操作任意數量的實參:

function getmaxvalue(/* ... */) 

}return max;

}console.log(getmaxvalue(4,2,1,8,10));//10

//階乘

function factorial(n)

else return nan;

}factorial[1] = 1;

console.log(factorial([5]));//120

為了不汙染全域性空間,常用定義匿名函式並立即在單個表示式中呼叫的方式:

var extendfun = (function () ());

call除了第乙個引數之後的引數就是要傳給函式的值:

function logmsg(x,y,z) 

//列印2/4/6

logmsg.call({},2,4,6);

function logmsg(x,y,z) 

//列印8/10/12

function logmsg(x,y,z) 

function wanttolog(a,b,c)

//列印1/2/3/4

wanttolog(1,2,3);

這個方法主要作用是將函式繫結至某個物件,除了第乙個實參以外,其他的實參會傳入到函式裡面:

function f(y,z) 

var g = f.bind(,4);

console.log(g(2));//3+4+2=9

//這裡面繫結了this和y

關於軟體測試的知識要點

最近為小舅子找工作出謀劃策,他的目標是軟體測試工程師。匆忙中給他做了一次模擬面試,面試中不小心也為自己整理了一下軟體測試方面的理解。遺憾的是我從來也沒有真正意義上地做過測試工程師,估計近期的將來也沒有這個機會,所以趕緊把一些要點記錄下來,以免日久生疏。測試思想 質量意識 責任 站在客戶的立場 好奇心...

js知識體系的梳理一

今天簡單的總結了js的一些東西,梳理下整個體系,每一次的總結都會有不同的收穫 js總結一 一 獲取元素 1 通過id var obtn document.getelementbyid btn1 var odiv document.getelementbyid div1 2 通過標籤 var adiv...

js中 關於bom的知識

1 screentop 瀏覽器左上角到物理螢幕左上角的垂直距離 2 screenleft 瀏覽器左上角到物理螢幕左上角的水平距離 3 以上兩種 除了火狐瀏覽器不相容外,其他瀏覽器都相容,火狐瀏覽器使用screenx和screeny,其功能和上面兩種一樣 處理相容性問題 browerleft wind...