1. 程式人生 > >【JavaScript】(4)普通函式、動態函式定義格式,呼叫方式,注意的詳細細節

【JavaScript】(4)普通函式、動態函式定義格式,呼叫方式,注意的詳細細節

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JavaScript語言基礎--函式function\Function</title>
    </head>
    <body
>
<pre> ▉js函式普通定義格式:▉ function 函式名(引數列表){ 執行語句; [return 返回值;] } </pre> <script type="text/javascript"> //js函式沒有返回值型別,形參也沒有型別 function hello(){ alert("hello function...."); } //hello();
function sum(a,b){ return a+b; } function fun(){ var x=sum(100,200); alert(x); } //fun();
</script> <!-- 呼叫已經載入好的js中的函式 --> <input type="button" onclick="hello();" value="函式1"/> <input type="button"
onclick="fun();" value="函式2" />
<h3>以下演示函式的若干細節</h3> <input type="button" onclick="demo( )" value="有關函式名及記憶體模型的細節"><br/> <input type="button" onclick="demo2( )" value="有關函式書寫位置的細節"><br/> <input type="button" onclick="demo3( )" value="有關函式引數的細節"><br/> <script type="text/javascript"> //❶、有關函式名及記憶體模型的細節 function getSum(){ return 10; } function demo(){ var x=getSum();//結果:10 【注意 】:獲得的是函式的返回值 alert(" x=getSum(); x= "+x); var y=getSum;/*【注意】:函式其實是一個Function物件,函式名即使物件名, 本句相當於引用賦值---y和getSum指向同一個Function物件*/ alert( y );//結果:相當於呼叫:y.toString( ); 輸出函式的特徵字串---函式的定義程式碼 alert( y( ) );//結果:輸出10---呼叫引用y所指向的那個Function物件對應的函式程式碼 } </script> <script type="text/javascript"> //❷、有關函式書寫位置的細節 function demo2(){ show(1,3); } /*【注意①】: ☆WA:不能執行,因為瀏覽器在解析當前<script>標記時,還沒有載入下一個<script>,因此不認識這個show(a,b)這個函式 ☆如果在上面的按鈕“有關函式書寫位置的細節”的單擊事件中呼叫dmeo2( ),則可以,因為事件發生時,瀏覽器已經把整個頁面解析完成(頁面顯示完) ☆綜上:為了我們寫的所有js函式被頁面都能認識,通常把這些js程式碼都寫在<head>中,然後再頁面元素事件呼叫,此時<head>部分早已解析完了*/ //demo2(); </script> <script type="text/javascript"> function show(a,b){//這裡的a,b是用來識別函式用的,而且讓js幫忙把前兩個實參裝配到這兩個變數,以便使用 alert(a+","+b); //【注意②】:有關函式引數細節的說明:js內部是用一個名為arguments的陣列去接收實參的 alert("arguments.length:"+arguments.length); for(var i=0;i<arguments.length;i++){ document.write(arguments[i]+"&nbsp;&nbsp;");//打印出show函式的引數 } } </script> <script type="text/javascript"> //❸有關函式引數的細節:js中的函式不存在過載,引數根據呼叫時的實參進行自動裝配---給了就賦值,沒給就undefined,多給了沒接住 //js中引數跟函式的識別沒有關係,只以函式名識別,而且函式名實際上是引用變數,和函式名捆綁的引用變數指向的是同一個函式 function demo3(){ //show(2, 3); //show("hello","hhh"); //show(1);//結果:1,undefined show(123,"abc",true,[10010,10101,10101]); } </script> <pre> ▉js動態函式的定義格式: ▉ var 函式名=new Function( 形參列表,函式體描述 );//形參列表和實參列表都以字串格形式給出 </pre> <script type="text/javascript"> /*用動態函式描述此普通函式 function add(a,b){ var s=0; s=a+b; return s; } */ </script> <script type="text/javascript"> //【注意】:動態函式簡單實用方式1: var add=new Function("a,b","var s=0; s=a+b; return s;");//引數列表合用一個引數列表 var add=new Function("a","b","var s=0; s=a+b; return s;");//引數列表分開寫 //alert("add( 2,3 )= "+add(2,3)); </script> <!-- 【注意】:動態函式深入實用方式2: --> <h3>動態函式的解耦用法演示---類似於Java中的 </h3> 引數列表:<input type="text" name="param">函式體描述:<input type="text" name="desc"> <input type="button" value="執行函式" onclick="bb();"> <script type="text/javascript"> function bb(){ /*此處一定要小心,value後邊沒有“ ( ) ” 沒發現,坑了好久 var param=document.getElementsByName("param")[0].value();*/ var param=document.getElementsByName("param")[0].value; var desc=document.getElementsByName("desc")[0].value; var f=new Function(param,desc); alert( f(2 ,3) ); } </script> </body> </html>