淺談JavaScript中的函數問題

来源:http://www.cnblogs.com/DF-fzh/archive/2016/04/01/5343530.html
-Advertisement-
Play Games

前面的話:JavaScript可運行在所有主要平臺的主流瀏覽器上,也可運行在每一個主流操作系統的伺服器端上。所以呢,要想成為一名優秀的全棧工程師,必須懂得JavaScript語言。這是我整理的JS的部分函數問題,供大家參考借閱,有不妥的地方也請多多指教。 1、函數的三要素 1.1 函數的功能 1.2 ...


前面的話:JavaScript可運行在所有主要平臺的主流瀏覽器上,也可運行在每一個主流操作系統的伺服器端上。所以呢,要想成為一名優秀的全棧工程師,必須懂得JavaScript語言。這是我整理的JS的部分函數問題,供大家參考借閱,有不妥的地方也請多多指教。

1、函數的三要素

   1.1 函數的功能
   1.2 函數的參數

          a. 形參——定義函數的時候,沒有實際的值,給實參占位           b. 實參——調用函數的時候,有實際的值;           c. 當調用函數的時候會把實參複製一份傳遞給函數                          d. 函數調用的時候,實參和形參的個數可以不等            e. 在其他語言中,有重載的概念,即函數的名字相同,但參數個屬不同;但javascript中沒有重載的概念。下麵的相同名稱的函數會把上面的函數覆蓋 

   1.3 函數的返回值——返回計算的結果

  1)函數返回,後續的代碼不會執行   2)如果return後面跟內容了,就返回return後面的內容   3)如果return後面沒有跟內容,返回undefined,return後面的代碼不會執行   4)如果函數內部沒有寫返回值,返回undefined   5)推薦的作法是要麼讓函數始終都返回一個值,要麼永遠都不要返回值

2、函數參數的註意點

                    function funName(a, b) { }

    2.1 判斷輸入的參數是否為空(過濾掉undefined null NaN " "    0)

        a = a || 0;         b = b || 0;

    2.1 判斷輸入的參數是否為數字

3、函數的基本形式(4種)

        ——無參數無返回值         ——有參數無返回值         ——無參數有返回值         ——有參數有返回值

4、/ * * +回車    對函數進行註釋,如下圖:

5、函數調用

    5.1 一個函數內部調用另一個函數的執行過程:         當f2執行完畢之後,會返回到f1繼續執行後續的代碼;              
1   function f1() {
2                         var a = 10;
3                            f2();
4                  }
5                        f1 ();
6                        f1 ();

   5.2 函數對自身的調用稱為遞歸【自調用函數】

    ——遞歸會消耗資源,當自身調用太多次仍會出現報錯。     5.3 函數是一種數據類型 function
        ①函數可以作為另一種函數的參數(如5.1)         ②函數可以作為函數的返回值

6、函數定義的兩種方式

    6.1 函數聲明 function fn() { }
    6.2 函數表達式 var myFun = function () {}   //這裡調用的是匿名函數
    6.3 函數聲明和函數表達式的區別:

            i)函數聲明——函數提升             ii)函數表達式——變數提升(下麵會詳細介紹)

7、變數的作用域

    7.1 全局作用域:在任何位置都可以訪問【全局變數】

            i)在script標簽中定義的變數             ii)不使用var聲明的變數             iii)在關閉網頁或瀏覽器,全局變數才會釋放

    7.2 局部作用域:在函數內部聲明一個變數,只能在該函數內部使用【局部變數】

            i)只有在函數內部使用var定義的變數

            ii)超出函數的作用範圍後,局部變數被銷毀

    7.3 javascript中沒有塊級作用域

            i)塊級作用域:在其他語言中,在代碼塊中定義的變數,外部是訪問不到的;             ii)if 和 for 中使用var定義的變數都是全局變數

8、函數提升和變數提升(過程)

  8.1  函數內部,獲取變數的時候,會先在當前作用域下找,有沒有變數聲明,如果有就返回當前作用域中變數的值
  8.2  如果當前作用域中沒有對應變數的聲明,會返回上一級去找

1)解析器預解析的過程:

    i,解析器

           ①全局作用域 預解析

 a) var num ;
 b) function fun ()

            ②一行一行執行代碼

  a) num = 10;
  b) fun (); 調用fun函數
    i) fun的局部作用域
      One. 預解析
        First.  var num;
      Two. 一行一行執行代碼
        First.   console.log(num);  輸出undefined
        Second.  num = 20;
  var  num;
  function fun () {
     var num;
     console.log (num );
     num = 20;
  }
  num = 10;
  fun();

 

var num = 10;
 fun();
function fun () {
        var num;
        console.log (num );
        num = 20;
  }
 
// 函數內部訪問外部變數
    var a = 10;
    function fn () {
        console.log(a);
    }
  2)變數提升——定義變數的時候,變數的聲明會被提升到作用域的最上面,變數的賦值不會提升   3)函數提升——JavaScript解析器首先會把當前作用域的函數聲明提前到整個作用域的最前面

9、構造函數與自定義構造函數

  9.1 構造函數:構造一個對象,並且返回的函數     ——調用構造函數: var student = new Object ();        ① 構造函數的目的是用來創建對象        ② 使用new Object()創建對象        ③ 封裝函數創建多個對象        ④ 自定義構造函數

  9.2 自定義構造函數

      ① 記憶體開闢空間,存儲新創建的對象 new Object ();
      ② 會把this設置為當前對象
      ③ 執行函數內部的代碼,設置對象的屬性和方法
      ④ 返回新創建的對象


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

-Advertisement-
Play Games
更多相關文章
  • 需求:根據年級下拉框的變化使得科目下拉框綁定次年級下對應有的值 我們用三層架構的模式來實現 1.我們想和資料庫交互,我們首先得來先解決DAL資料庫交互層 01.獲得年級下拉框的數據 在GradeDAL類中 02.在業務邏輯層 03.在窗體UI層 在Load事件中載入年級下拉框 其中在使用 獲得年級下 ...
  • 本地文件系統如ext3,reiserfs等 (這裡不討論基於記憶體的文件系統),它們管理本地的磁碟存儲資源、提供文件到存儲位置的映射,並抽象出一套文件訪問介面供用戶使用。但隨著互聯網企業的高 速發展,這些企業對數據存儲的要求越來越高,而且模式各異,如淘寶主站的大量商品圖片,其特點是文件較小,但數量巨大 ...
  • HTML5已經成為最流行的編程語言在web開發者。強大的編程語言有很大的能力,生產更好的萬維網內容。HTML5的興起已經在過去三年增長迅速。介紹了HTML5的新技術是更好的。HTML5技術是由像Chrome的瀏覽器,支持Firefox、IE和更多。今天,我們列出了十個HTML5動畫製作工具,可以幫助 ...
  • 最近的工作在做一個多步驟多分步的表單頁面,這個多步驟多分步的意思是說這個頁面的業務是分多個步驟完成的,每個步驟可能又分多個小步驟來處理,大步驟之間,以及小步驟之間都是一種順序發生的業務關係。起初以為這種功能很好做,就跟tab頁的實現原理差不多,真做下來才發現,這裡面的相關邏輯還是挺多的(有可能是我沒... ...
  • “我們正在用HTML5編寫我們下一套移動產品。”“是啊,這些天很多人在玩著Appcelerator,我也在玩著。”“嗯,但這並不是我要說的那種HTML5產品。” 最近,我有很多類似的交流對話,可能因為我正在開發一套HTML5的應用吧。就像2005年的“AJAX”,“HTML5”這個術語現在還沒有被清 ...
  • 前段時間做項目,有個功能是消息提醒。 我相信很多大牛都做過。下麵來分享我遇到的問題和解決方案。 首先我們的項目是用frameset框架,main代碼。 <frameset name="myFrame" cols="85,*" frameborder="no" border="0" framespac ...
  • 即將從事Web前端的工作的 先對即將從事的行業有個瞭解。 Web前端發展史: 第一個網頁誕生於90年代初,早期的網頁除了一些小圖片和毫無佈局可言的標題段落,其全由文字構成。然而隨著時代的進步,互聯網的不斷發展,接下來出現了表格佈局,此次是flash,最後是基於CSS的網頁設計。不可否認,前端頁面重構 ...
  • JavaScript中有三個可以對字元串編碼的函數,分別是: escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent 。 下麵簡單介紹一下它們的區別 1 escape()函數 定義和用法es ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...