【JavaScript】(4)普通函式、動態函式定義格式,呼叫方式,注意的詳細細節
阿新 • • 發佈:2018-12-23
<!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]+" ");//打印出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>