JavaScript的function函數詳細介紹

通過函數來封裝任意多條語句,而且可以在任何地方、任何時間調用執行。

而我們的JavaScript腳本語言比較特殊,相對於C語言,它的參數是不需要數據類型加持的。返回值return,我就不過多描述,他是和 C語言通的,如果沒寫他就會自動返回undefined

function fun(x,y){
            
        }
//寫成這樣就可以聲明一個函數

以我的理解他就是以對象的形式來傳入參數,通過對象的各項屬性值(引用類型的值),來作為我的實際參數,

例如我有以下做法:

function fun(x, y) {
          //  alert("x的值是" + x.value);
            alert("x的值是" + x);
        }

當我是這種操作的時候,他的彈出框報錯是:x的值是[object HTMLInputElement],以對象的形式傳入的它是不符合我的邏輯設計的,應該是下面的這種做法。

返回我的x的value值。

function fun(x, y) {
            alert("x的值是" + x.value);
          //  alert("x的值是" + x);
        }

  • 所以當我設計一個簡單的,兩個整數數字相乘,返回值。
  • 這裡就要特別記憶一下<form></form> 要把輸入的這一段html代碼寫在這個標簽裡。不然你將會找好半天錯誤(別問我怎麼知道的,說多瞭都是淚)

咋們是深度理解,先別急,再看看這段代碼:

是不是著這裡有著不一樣的發現,照以前的這個函數寫法,鐵定是在亂寫,是不是?但是他在這裡是能運行的,笑死(開心的笑)

也就是說ECMAScript函數不介意傳進來多少個參數,也不在乎你傳進來個神馬參數,解析器永遠都不會有任何怨言。(太爽瞭,老師再也不用擔心我不會傳參瞭),那他是如何解決這個“世紀難題 ”的呢,其實在每個函數體內,都有一個arguments對象來訪問這個參數數組,從而獲取傳遞給數組的每一個參數。

道友試試給下面代碼fun函數用雙引號fun(“勇敢”,“牛牛”),會發生什麼現象,解釋一下就是上引號就近配對,嗚嗚嗚嗚

哎,這和咱們學的java函數重載是不是有點那味道瞭呀,其實JavaScript是沒有重載滴。

再看兩個例子:

function fun() {
    if (arguments.length == 1) {
        alert(arguments[0] + 10);

    }
    if (arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
    }
}
fun(10);//20
fun(10,20);//30

也隻能通過傳入參數的個數上,實現適當的功能,並不是實現真正意義上的重載,雖然特性算不上完美的重載,但是也足夠彌補JavaScript的這一遺憾。arguments也可以與參數與一起使用,

如下:

function fun(num1, num2) {
    if (arguments.length == 1) {
        alert(num1 + 10);

    }
    if (arguments.length == 2) {
        alert(arguments[0] + num2);
    }

}
fun(10);//20
fun(10, 20);//30

那麼就有寶問瞭,參數反正都是賦值在arguments對象中,那麼我直接修改 arguments[i] 值是否可行呢?

  • 那有意思的是,關於arguments行為,它的值永遠與對應的命名參數值保持同步,他會修改當下函數內的值!!!,也就是說參數與arguments[i]內存空間時獨立的,但是值會同步。
function fun(num1, num2) {
    arguments[1] = 10;
    alert(arguments[0] + num2);
}

</script>
<form>
 <br><input type="button" onclick="fun(10,20)" value="點擊">
</form>

他彈出框的值就是20;可見是修改arguments[i]值,會自動反應到這個參數當中,要是沒有這個參數,重寫這個參數值,將會導致語法錯誤。代碼不會執行。如果有兩個相同的函數名他不會報錯,但是該名字隻屬於後定義的函數。

總結:

  • JavaScript函數與其他語言函數有很多細節之處不同。
  • 無需非得要返回值,因為在任何時候他都可以返回任何值
  • arguments.length長度由傳入參數的個數確定,而不是定義時函數的命名數決定。
  • 是沒有重載的,即參數是可以0個或者多個的的數組形式參與的,並且通過arguments對象來訪問這些參數。

到此這篇關於JavaScriptfunction函數詳細介紹的文章就介紹到這瞭,更多相關JavaScript的function函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: