JavaScript之 ------ 函式(一般函式、動態函式、匿名函式)
阿新 • • 發佈:2018-12-23
函式
一、一般函式
1、格式:
function 函式名(形式引數...)
{
執行語句;
return 返回值;
}
函式是多條執行語句的封裝體,只有被呼叫才會被執行。
注意:呼叫有引數的函式,但沒有給其傳值,函式一樣可以執行,或者呼叫沒有引數的函式,給其傳值,該函式也一樣執行。
說的簡單點:只要寫了函式名後面跟了一對小括號,該函式就會執行。
2、函式雖然定義時是宣告成兩個引數,但呼叫時卻是可以傳入任意個
例:
show(4,8); 結果:4:8<span style="font-size:14px;">function show(x,y){ alert(x+":"+y); }</span>
show(4);結果:4:undefined
show(); 結果:undefined:undefined
show(4,8,89); 結果:4:8
綜上的例子,Js當中的函式是不存在過載的。如果有,一定就通配所有的了。
3、每個函式中,存在一個 預設的陣列arguments ,裡面儲存著本次呼叫時傳入的所有實參
結果:1 2 3 45<span style="font-size:14px;">function show2(x,y){ for(var i=0; i<arguments.length;i++){ document.write(arguments[i]+" "); } } show2(1,2,3,45);</span>
4、函式在呼叫時的其他寫法
<span style="font-size:14px;"><script type="text/javascript"> function getSum(){ return 100; } var sum = getSum(); // alert(sum); //結果:100 var sum2 = getSum; //相當於java當中的 引用捆綁 //alert(getSum); //結果:getSum.toString() // alert(sum2); //結果:sum2.toString(),也就是getSum.toString() //alert(sum2()); //等價於呼叫:getSum() function show2(){ alert("kkkl"); } alert( show2() ); //先彈出“kkkl”,再彈出“undefined”。因為裡面的函式沒有return值,而外面的函式要用變數去接,結果相當於變數沒賦值就輸出 </script></span>
二、動態函式
利用Js當中內建的物件Function來構造一個函式,構造方法中的第1個引數是“形參”,第2個引數是“函式體”。
該思想類似於Java當中的類反射。我們平時寫函式時通常不用,但關鍵的地方一寫,整個程式的功能會變得很活。
<span style="font-size:14px;">var add = new Function("x,y", "var sum; sum=x+y;return sum;");
var s = add(100,39);
alert("s="+s);</span>
三、匿名函式
格式:function(){...}
例:
var demo = function(){...}
demo();
通常在定義事件屬性的行為時較為常用。
例:
function test()
{
alert(“load ok”);
}
window.onload = test;
可以寫成匿名函式的形式:
window.onload = function()
{
alert(“load ok”);
}
匿名函式就是一種簡寫格式。
四、函式呼叫
function.js
//1 取最大值:輸出給定陣列當中值最大的元素
//函式定義
function getMax(arr){
var max=0;//記下標
for(var x=1; x<arr.length; x++){
if(arr[x]>arr[max]){
max = x;
}
}
return arr[max];
}
//2 陣列排序
//函式定義
function sortArray(arr){
for(var x=0; x<arr.length-1; x++){
for(var y=x+1; y<arr.length; y++){
if(arr[x]>arr[y]){
swap(arr,x,y);
}
}
}
}
//輔助函式,用於交換陣列中的兩個元素
function swap(arr,x,y){
var temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
//3 模擬Java當中的System.out.println()
function println(str){
document.write( str +"<br>");
}
//4 在陣列當中查詢元素(若存在則返回該元素的位置,否則返回-1)
function searchElement(arr,key){
for(var x=0; x<arr.length; x++){
if(arr[x]==key){
return x;
}
}
return -1;
}
//5 二分查詢
function binarySearch(arr,key){
var max,min,mid;
min=0;
max=arr.length-1;
while(min<=max){
mid=(max+min)>>1;
if(key>arr[mid]){
min=mid+1;
}else if(key<arr[mid]){
max=mid-1;
}else{
return mid;
}
}
return -1;
}
//6 陣列反轉
function reverseArray(arr){
for(var start=0,end=arr.length-1; start<end; start++,end--){
swap(arr,start,end);
}
}
呼叫:<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript" src="functions.js">
</script>
<script type="text/javascript">
//1 函式呼叫
var arr=[133,-22,33,43,1211];
var mValue = getMax(arr);
//alert("mValue="+ mValue);
//2函式呼叫
document.write("排序前:"+arr +"<br>"); // println(arr);
sortArray(arr);
document.write("排序後:"+arr);
//3 函式呼叫
println("");
println(arr);
//4 函式呼叫
var a=searchElement(arr,133);
//alert(a);
//5 函式呼叫
var b=binarySearch(arr,-2);
//alert(b);
//6 函式呼叫
reverseArray(arr);
println(arr);
</script>
</body>
</html>