JavaScript 函數、函數構造、函數調用、參數、函數返回值、變數的作用域、預解析

来源:https://www.cnblogs.com/ljygzyblog/archive/2023/11/04/JavaScript-9.html
-Advertisement-
Play Games

一、函數及函數的構造 函數是一個可重用的代碼塊,用來完成某個特定功能。每當需要反覆執行一段代碼時,可以利用函數來避免重覆書寫相同代碼。 函數包含著的代碼只能在函數被調用時才會執行,就可以避免頁面載入時執行該腳本 簡單來說就是一個封裝,封裝的是一個特定的功能,重覆使用 函數的三種定義方法: Funct ...


一、函數及函數的構造

函數是一個可重用的代碼塊,用來完成某個特定功能。每當需要反覆執行一段代碼時,可以利用函數來避免重覆書寫相同代碼。

函數包含著的代碼只能在函數被調用時才會執行,就可以避免頁面載入時執行該腳本

簡單來說就是一個封裝,封裝的是一個特定的功能,重覆使用

函數的三種定義方法:

Function構造函數定義函數

var 函數名 = new Function(“參數1”,”參數2”,”參數3”……”函數體”);

function語句定義函數

function 函數名 (參數1,參數2……[形參]){
  <語句塊>
  return 返回值
}

在表達式中直接定義函數

var 函數名 = function (參數1,參數2,…){函數體};

註意:

函數名的書寫規範,不能一數字特殊符號和關鍵字命名,一般命名方式小駝峰

二、調用函數

1.直接調用

  // //直接調用,window.視窗調用
        // window.show() //show()

2.事件處理中調用

//事件中調用
        //<div onclick="show()">hello</div>

3.將函數的返回值賦給變數

 //將函數的返回值賦給變數
        var t = show()

三、參數

形參:定義函數時,函數名後面()中的參數;JavaScript中的函數允許給行參賦初始值

實參:調用函數時,傳遞的參數

參數的匹配: 預設情況下,形參和實參是一一對應的 但是當傳遞的參數個數與函數定義好的參數個數可以不匹配當不匹配時

  • 如果傳遞的參數個數小於函數定義的參數個數,JavaScript會自動將多餘的參數值設為undefined;

  • 如果傳遞的參數個數大於函數定義的參數個數,那麼多餘傳遞的參數將會被忽略掉。

如果傳遞的參數是一個數組的話,一一對應太過麻煩,我們就用arguments,獲取所有實參

 function show (a,b){
            console.log(arguments.length);
        }
 show('guo','yuan')
function Test(a,b){
    alert(typeof(arguments)); // 獲得類型
    alert(arguments[1]);      // 獲取下標為1的參數值
    alert(arguments.length);  // 獲取參數的長度
    alert(arguments.callee);  // 獲取函數的所有內容
}
Test("zhang","li");

四、函數的返回值

return特點:
  1)函數內部的值(局部變數),想要在函數外部進行(全局變數)使用,就可以使用return
  2)如果沒有return,那麼return的返回值預設值undefined
  3)return可以返回值,但是只能返回一個;如果想要返回多個,可以使用數組進行返回
  4)在函數中,只要看到return,就表示函數的結束,後面的代碼都不會執行

五、變數作用域

全局變數: 在函數外聲明的的變數為全局,在整個JS文檔中生效

局部變數: 在函數內用var聲明的變數為局部變數,只能在函數內部使用。

局部變數變成全局:
  return 返回
  去除 var 關鍵詞

什麼是作用域鏈

  • 只要在js中創建變數,就會存在作用域【全局作用域】

  • 寫在函數內部的被稱為局部作用域

  • 如果函數中還有函數,那麼在這個作用域中就又可以誕生一個新的作用域

  • 在函數中如果在當前作用域中沒有查到值,就會向上級作用域去查,直到查到全局作用域,這樣一個查找過程形成的鏈條就叫做作用域鏈。

六、預解析

預解析,又稱之為變數提升,在js代碼真正執行之前,進行提前載入,把所有帶有var和function的關鍵字進行預

//預解析:
            var function 
            console.log(fn) // 函數體
            var fn = 10;
            function fn(){
            }
            console.log(fn) // 變數

同時出現變數和函數的提升,在他們兩個之前輸出的話解析的是函數體,預解析的優先順序大於變數的

如果在他們兩個之後輸出的話解析的是變數,因為根據優先棧記憶體找到數據的執行代碼順序先找到的var變數

預解析相關案例練習:

// 案例1
var num = 10;
fun();
function fun(){
  console.log(num);
  var num = 20;
}
// 案例二
var num = 10;
function fun() {
    console.log(num);
    var num = 20;
    console.log(num);
}
fun();

// 案例三
var a = 18;
f1();
function f1() {
    var b = 9;
    console.log(a);
    console.log(b);
    var a = 13;
}

// 案例四
console.log(a,b,c);
var a = b = c = 5;

// 案例四
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
    var a = b = c = 9;
    console.log(a);
    console.log(b);
    console.log(c);
}
// 案例五
fn();//報錯 只預解析“=”左邊的,右邊的是指針,不參與預解析
var fn=function(){
    console.log(11);
}
// 案例六
function fn(){
    console.log(a);
    a=100;
}
fn();
console.log(a);
//註意:js中,如果在不進行任何特殊處理的情況下,上面的代碼報錯,下麵的代碼不再執行

// 案例七
console.log(show);
function show(){
  console.log(123);
}
var show = 10;

// 案例八
function show(){
  console.log(123);
}
var show = 10;
console.log(show);

 


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

-Advertisement-
Play Games
更多相關文章
  • 這裡簡單介紹一下如何處理解決Linux平臺下Oracle 19c啟動時,告警日誌出現ORA-00800錯誤的問題,詳情介紹請見下麵內容: 環境描述: 操作系統:Red Hat Enterprise Linux release 8.8 (Ootpa) 資料庫 :19.16.0.0.0 企業版 問題描述 ...
  • 背景 目前單位系統常用 Keycloak 作為認證系統後端,而前端之前寫的也比較隨意,這次用 Vue 3 插件以及 Ref 響應式來編寫這個模塊。另外,這個可能是全網唯一使用 keycloak 的 OIDC 原生更新密碼流的介紹代碼。 設計 依賴庫選擇 OIDC 客戶端,這裡選擇 oidc-clie ...
  • 作者:WangMin 格言:努力做好自己喜歡的每一件事 CSDN原創文章 博客地址 👉 WangMin 我們在開發的過程中,難免會出現一些難以預料的問題。那麼其中,CSS空白現象就是非常常見的問題之一。雖然它已經被髮現很久,但仍然有許多新手和經驗豐富的開發者們忽略了它對頁面佈局的影響。我們一起來看 ...
  • 函數在JS中也是一個對象,它具有其它對象的所有功能,函數中可以存儲代碼,且可以在需要的時候調用這些代碼 函數的操作 函數的定義 函數聲明 function 函數名([參數列表]) { // 函數體 return 返回值; } 函數表達式 const 函數名 = function([參數列表]) { ...
  • vue3 地址 https://github.com/vuejs/core 首先看看vue文檔什麼是 Vue? ​ Vue (發音為 /vjuː/,類似 view) 是一款用於構建用戶界面的 JavaScript 框架。它基於標準 HTML、CSS 和 JavaScript 構建,並提供了一套聲明式 ...
  • 一、變數的生命周期 JavaScript 變數的生命期從它們被聲明的時間開始。 局部變數會在函數運行以後被刪除。 全局變數會在頁面關閉後被刪除。 二、自執行函數 執行函數通常都是定義之後立即執行,以後都不再會調用,所以聲明時可以省略函數名,因此自執行函數又叫匿名函數。 通用的自執行函數方式有兩種: ...
  • JS概念 javaScript是用於實現用戶交互、動態控制文檔的外觀和內容,動態控制瀏覽器操作、創建cookies等網頁行為的跨平臺、跨瀏覽器的由瀏覽器解釋執行的客戶端腳本語言; 特點 是基於對象的弱類型語言 弱類型語言:是一種弱類型定義的語言,某一個變數被定義類型,該變數可以根據環境變數自動進行轉 ...
  • 一、創建數組對象的方式 var arrOb=new Array(值,........) var arrOb=Array(值,.......) var arrOb=[值,.........] var arrOb=new Array(n); arrOb[0]=值1; arrOb[1]=值2; 二、數組的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...