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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...