JS高程3.基本概念(6)函數

来源:http://www.cnblogs.com/LinSL/archive/2016/12/11/6159554.html
-Advertisement-
Play Games

1.ECMAScript中的函數使用function關鍵字來聲明。 eg: 註意: 在有return語句的函數中,函數會在執行完return語句後停止並立即退出。因此,位於return語句之後的任何代碼都永遠不會執行。 eg: 以上代碼執行後,會出現內容為“10”的警告框,但是不會出現內容為“Hel ...


1.ECMAScript中的函數使用function關鍵字來聲明。

eg:

1 function sum (num1,num2){
2     alert(num1+num2);
3  }
4  sum(3,7);

註意:

  在有return語句的函數中,函數會在執行完return語句後停止並立即退出。因此,位於return語句之後的任何代碼都永遠不會執行。

eg:

1 function sum (num1,num2){
2     return num1+num2;
3     alert("Hello!");//永遠不會執行。
4  }
5  alert(sum(3,7));

  以上代碼執行後,會出現內容為“10”的警告框,但是不會出現內容為“Hello!”的警告框,因為函數內部執行完return語句後就停止結束了,不會執行後面的alert(“Hello!”);語句。

 

2.嚴格模式下對函數的一些限制

(1)不能把函數命名為evel或是arguments;

(2)不能把參數命名為evel或是arguments;

(3)不能出現兩個命名參數同名的情況。

 

3.理解參數

(1)ECMAScript中的參數在內部是用一個數組來表示的,函數接收到的始終是這個數組,ECMAScript函數不介意傳遞進來的參數個數以及參數的數據類型,從這一點可以看出,ECMAScript函數不能實現傳統意義上的重載

 重載函數的定義:在相同的聲明域中的函數名相同的,而參數表不同的,即通過函數的參數表而唯一標識並且來區分函數的一種特殊的函數。

(2)函數體內可以通過arguments對象訪問到參數數組,從而獲得傳遞給函數的每一個參數。

  

1  function sum (){
2     return arguments[0]+arguments[1];
3  }
4  alert(sum(3,6));

 

以上例子說明:

  ECMAScript函數命名的參數只提供便利,但不是必需的。

(3)arguments對象的length屬性可以獲知有多少個參數傳遞給了函數。

eg:

1 function howManyArgw(){
2     alert(arguments.length);
3  }
4  howManyArgw("hello",45); //2
5  howManyArgw();     //0
6  howManyArgw(12);   //1

出現三個提示框,依次是:

(4)開發人員可以利用這一點讓函數接收任意個參數並分別實現適當的功能

eg:

1  function doAdd(){
2         if(arguments.length==1){
3             alert(arguments[0]+10);
4         }else if(arguments.length==2){
5             alert(arguments[0]+arguments[1]);
6         }
7     }
8     doAdd(20);
9     doAdd(21,10);

 

(5)arguments對象可以與命名參數一起使用:

eg:

1  function doAdd( num1,num2){
2         if(arguments.length==1){
3             alert(num1+10);
4         }else if(arguments.length==2){
5             alert(arguments[0]+num2);
6         }
7     }
8     doAdd(20);
9     doAdd(21,10);

(6)arguments的值永遠與對應命名參數的值保持同步。

eg:

1  function add(num1,num2){
2         arguments[1]=10;  //每次執行add函數都會重寫第二個參數,將第二個參數的值改為10.
3         alert(arguments[0]+num2);
4     }
5     add(1,2);//本來的值是1+2=3,因為第二個參數的值被改變1+10=11.

註意:

(1)這並不是說著兩個值會訪問相同的記憶體空間,它們的記憶體空間是獨立的,但是它們的值會同步。

(2)沒有傳遞值的命名參數將會自動被賦予undefined值。

eg:

1 function add(num1,num2){
2         arguments[1]=10;
3         alert(arguments[0]+num2);
4     }
5     alert(typeof(num2));
6     add(1);

依次出現的提示框:

(3)ECMAScript中的所有參數傳遞都是值,不可能通過引用傳遞參數。

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在jQuery之焦點圖轉換-左右的基礎上,將jQuery代碼改成js原生,並添加定時器(setInterval()和clearInterval()) ...
  • ...
  • 左右轉換需要在實現左右轉換的同時實現點擊換圖,這樣就需要(num=index;即紅色部分。),詳解見代碼。 ...
  • 以上是一個簡單地焦點圖事例,思路:圖片路徑寫在a標簽的href屬性里,點擊a得到$(this).attr("href");並把這個值給img的src。用簡單地jQuery寫一個點擊事件。 ...
  • log4js "log4js" 是一個管理,記錄日誌的工具。 其實與 "morgan" 的作用類似。 安裝 log4js的6個日誌級別 分別是:trace(藍色)、debug(青色)、info(綠色)、warn(黃色)、error(紅色)、fatal(粉色) 這6個level方便我們給日誌設置不同的 ...
  • 前言 好吧,我承認我是為了搞定Sass編譯CSS文件的問題,迷一樣的著手入gulp的坑,sass和gulp的爬坑歷程大概會一起更新。然後感覺這裡windows和mac的流程差不多,不過mac的通常在指令前加sudo ,本喵是windows的本本,所以就以windows的流程為例了。 1. 安裝淘寶c ...
  • 最近遇到一個問題,對於某一個持續的動作,希望能夠知曉用戶何時停止這個動作, 比如說 我們通過註冊onresize事件,去監聽瀏覽器視窗變化的事件,在這個事件裡面,我們可能要執行大量的計算去確定視窗變化後的一個佈局 可惜的是,onresize事件,在視窗大小發生改變的時候就會觸發一次,像筆者這種喜歡拖 ...
  • 一、單側陰影 box-shadow屬性的應用,格式:h-shadow v-shadow blur spread color inset屬性取值介紹 h-sahdow:水平陰影的位置,允許負值 v-shadow:垂直陰影的位置,允許負值 blur:模糊距離 spread:陰影的尺寸,擴張距離,可以為負 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...