【技術積累】JavaScript中的函數【一】

来源:https://www.cnblogs.com/yyyyfly1/archive/2023/06/13/17477105.html
-Advertisement-
Play Games

博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...


什麼是函數?如何聲明函數?

JavaScript中的函數是一段可重覆使用的代碼塊,它可以接受輸入並返回輸出。 在JavaScript中,函數是一種特殊的對象,因此可以將其存儲在變數中,將其作為參數傳遞給其他函數,並從其他函數中返回。

在JavaScript中,聲明函數有兩種方式:函數聲明和函數表達式。

1. 函數聲明

函數聲明是指用關鍵字function定義函數的方法,在函數名後跟一對圓括弧和一對花括弧,併在花括弧中編寫函數體。

示例:聲明一個函數,它將兩個數字相加並返回其總和。

function addNumbers(num1, num2) {
  return num1 + num2;
}

2. 函數表達式

函數表達式是指將函數賦值給變數的方法。它通常包含一個匿名函數,因此可以使用變數名調用該函數。

示例:用函數表達式聲明一個函數,它列印出兩個數字的總和。

let addNumbers = function(num1, num2) {
  console.log(num1 + num2);
};

函數還可以在調用時接受參數。這些參數通常是函數需要的輸入,可以在函數中使用。

例如,下麵的函數將兩個參數相加並返回結果:

function addNumbers(num1, num2) {
  return num1 + num2;
}

let result = addNumbers(3, 5);
console.log(result); // 輸出結果為 8

在這個例子中,我們調用了addNumbers函數,並將3和5傳遞給它作為參數。計算完成後,該函數返回結果8。 最後,我們將結果輸出到控制台。

總之,JavaScript中的函數是一種強大的工具,可以幫助我們將代碼重用和管理代碼流程。無論是函數聲明還是函數表達式,我們都可以使用它們來創建代碼塊,以便在程式中多次使用。

函數如何返回值

JavaScript函數可以返回值。一個函數可以返回一個值,這個值可以是任意類型的數據,包括數字、字元串、對象等等。

要返回一個值,可以使用關鍵字“return”後面跟著要返回的值。示例如下:

function add(a, b) {
  return a + b;
}

var sum = add(2, 3);
console.log(sum); // 輸出 5

在這個例子中,函數“add”返回了參數“a”和“b”的和。當使用這個函數時,返回值會被存儲在變數“sum”中,並且在控制臺中輸出。

在函數內部,如果沒有明確的使用“return”語句,則預設返回“undefined”。例如:

function sayHello() {
  console.log("Hello");
}

var result = sayHello();
console.log(result); // 輸出 undefined

在這個例子中,函數“sayHello”沒有返回任何值,因此預設返回了“undefined”。

在實際編程中,函數的返回值通常用於向調用者傳遞處理結果或者狀態。例如,在某些情況下,可能需要根據函數返回的值採取不同的操作,像這樣:

function checkAge(age) {
  if (age >= 18) {
    return "成年人";
  } else {
    return "未成年人";
  }
}

var result = checkAge(20);

if (result === "成年人") {
  console.log("你可以去看電影");
} else {
  console.log("你還不能去看電影");
}

在這個例子中,函數“checkAge”接收一個參數“age”,根據年齡判斷是否成年,並返回“成年人”或“未成年人”。當調用函數時,返回值被存儲在“result”變數中。在後面的代碼中,使用“if”語句根據返回值來判斷是否可以去看電影。

什麼是函數參數?函數參數傳遞的方式有哪些?

函數參數是函數定義時用來接收外部傳遞進來的值或對象的占位符。在調用函數時,我們需要傳遞實際的值或對象作為函數參數,以便在函數內部使用。

函數參數傳遞的方式有以下幾種:

  1. 傳遞單個值:直接把值傳遞給函數。

  2. 傳遞多個值:使用逗號分隔多個值,按照參數列表的順序傳遞給函數。

  3. 傳遞對象:將一個對象作為參數傳遞給函數,函數可以通過對象訪問其屬性。

  4. 傳遞數組:將一個數組作為參數傳遞給函數,函數可以使用數組下標訪問數組元素。

  5. 省略參數:可以省略某些參數,未傳遞的參數將被設定為undefined。

  6. 回調函數:將一個函數作為另一個函數的參數傳遞,以便在另一個函數執行完成後調用該函數。

  7. 使用arguments對象:函數內部可以使用arguments對象訪問所有傳遞進來的參數,無需事先定義參數的名稱和數量。

  8. ES6中的展開運算符:可以使用展開運算符將數組或對象中的值展開為函數的參數。

在函數中使用全局變數可以直接使用全局變數的名稱。在JavaScript中,全局變數可以通過在函數外部定義變數來創建。例如:

var globalVar = "Hello World!";

function myFunction() {
  console.log(globalVar);
}

myFunction(); // 輸出結果:Hello World!

在函數內部創建局部變數,可以使用var、let和const關鍵字定義一個新的變數。這些變數的作用域僅限於函數內部,函數外部無法訪問。例如:

function myFunction() {
  var localVar = "This is a local variable.";
  console.log(localVar);
}

myFunction(); // 輸出結果:This is a local variable.
console.log(localVar); // 拋出ReferenceError異常:localVar is not defined

在ES6中,使用let和const關鍵字創建的變數具有塊級作用域,可以在定義變數的塊中訪問該變數,包括在函數內部。例如:

function myFunction() {
  let localVar = "This is a local variable.";
  console.log(localVar);
}

myFunction(); // 輸出結果:This is a local variable.
console.log(localVar); // 拋出ReferenceError異常:localVar is not defined

什麼是函數作用域

JavaScript的函數作用域是指變數可以在函數內聲明併在函數內使用,而在函數外無法訪問該變數。這是因為JavaScript中的函數都有它們自己的作用域。

例如,在以下示例中,變數x在函數foo的作用域中聲明,因此只能在該函數內部使用:

function foo() {
  var x = 10; // 變數x 只在函數foo中可見
  console.log(x);
}

console.log(x); // 報錯,變數x無法訪問

函數作用域可以幫助程式員避免變數命名衝突和全局變數的濫用。它還允許在函數內聲明和使用私有變數,這些變數不會泄露到全局作用域中。

JavaScript中的函數作用域實現是通過詞法作用域(也稱靜態作用域)實現的。在詞法作用域中,函數的作用域是在函數定義時確定的,而不是在函數調用時確定的。這意味著函數可以在它被定義的地方訪問其外部作用域中的變數,而不必等到函數被調用時。

什麼是閉包?如何使用閉包?

閉包是指在一個函數內部定義另一個函數,並使得這個內部函數可以訪問到外部函數的變數和參數。閉包可以將這些變數和參數的值保存下來,以供後續使用。

在JavaScript中,可以使用閉包來實現許多功能,比如:

1. 封裝私有變數

通過使用閉包,可以創建一個對象,該對象包含一些私有變數和一些公共方法,但這些私有變數無法從外部訪問。這樣做可以保證代碼的安全性和可維護性。

例如:

function createCounter() {
  var count = 0;
  return {
    increment: function() {
      count++;
    },
    getValue: function() {
      return count;
    }
  };
}

var counter = createCounter();

counter.increment();
console.log(counter.getValue()); // 1

2. 延遲執行

通過使用閉包,可以在需要時延遲執行某些代碼,這對於一些需要耗費時間的操作(比如網路請求)很有用。

例如:

function delayedAlert(message, time) {
  setTimeout(function() {
    alert(message);
  }, time);
}

delayedAlert('Hello World!', 2000);

3. 記憶化

通過使用閉包,可以在函數執行時將其結果緩存下來,以便下次執行時直接返回緩存的結果,從而提高性能。

例如:

function memoize(func) {
  var cache = {};
  return function() {
    var key = JSON.stringify(arguments);
    if (cache[key]) {
      return cache[key];
    } else {
      var result = func.apply(this, arguments);
      cache[key] = result;
      return result;
    }
  };
}

var fib = memoize(function(n) {
  if (n <= 1) {
    return n;
  } else {
    return fib(n - 1) + fib(n - 2);
  }
});

console.log(fib(10)); // 55

4. 模塊化

通過使用閉包,可以創建一個獨立的模塊,該模塊包含一些私有變數和方法,同時仍然可以對外暴露一些公共方法。

例如:

var calculator = (function() {
  var result = 0;

  function add(x) {
    result += x;
  }

  function subtract(x) {
    result -= x;
  }

  function reset() {
    result = 0;
  }

  function getResult() {
    return result;
  }

  return {
    add: add,
    subtract: subtract,
    reset: reset,
    getResult: getResult
  };
})();

calculator.add(5);
calculator.subtract(2);
console.log(calculator.getResult()); // 3
calculator.reset();
console.log(calculator.getResult()); // 0

總之,閉包是一種非常強大的功能,在JavaScript中廣泛使用。它可以用於封裝私有變數、延遲執行、記憶化、模塊化等多種場合。

閉包的優點和缺點是什麼?

JavaScript閉包的優點:

  1. 可以通過閉包來創建私有變數和方法,防止變數和方法被外部代碼訪問和修改,從而保護程式的安全性。
  2. 可以幫助我們實現高階函數,從而提高代碼的可復用性,並且可以使代碼更加簡潔。
  3. 閉包可以實現數據緩存,從而提高程式的性能,避免重覆計算。

JavaScript閉包的缺點:

  1. 閉包可能導致記憶體泄漏,因為閉包中捕獲的變數不會被垃圾回收機制自動釋放。
  2. 閉包的運行速度可能比常規函數慢,因為它需要同時保存外部函數的作用域和內部函數的作用域。
  3. 閉包可能會導致變數被意外修改,因為閉包中的變數是共用的,如果在外部函數中修改了閉包中的變數,那麼所有使用該閉包的代碼都會受到影響。

什麼是高階函數

在JavaScript中,高階函數是指能夠接收一個或多個函數作為參數,並且能夠返回一個新函數的函數。這種函數的靈活性讓它們非常強大,並可以用於編寫更加簡潔和靈活的代碼。

高階函數的特點:

  1. 接收一個或多個函數作為參數。
  2. 返回一個新函數。
  3. 可以對參數函數進行處理,比如運算、組合、封裝等操作。

高階函數的使用場景:

  1. 回調函數:在非同步代碼中,高階函數常常被用作回調函數,用於處理非同步操作的結果。
  2. 遍歷:高階函數可以用於對數組、對象或其他數據結構進行遍歷和篩選。
  3. 函數組合:高階函數可以將多個處理邏輯組合在一起,實現更加複雜的功能。
  4. 封裝:高階函數可以用於對一些重覆的操作進行封裝,提高代碼重用性和可維護性。

例如,如果我們想在一個數組中找到所有大於3的數字,可以使用高階函數`filter`:

const arr = [1, 2, 3, 4, 5];
const result = arr.filter(function(item) {
  return item > 3;
});
console.log(result); // [4, 5]

在上述代碼中,`filter`函數就是一個高階函數,它接收一個匿名函數作為參數,用於處理數組元素,並返回一個新的數組,其中僅包含滿足條件的元素。

什麼是回調函數?如何使用回調函數?

回調函數是一個在某個事件發生時執行的函數,它是JavaScript中一種常見的非同步編程方式。回調函數通常作為參數傳遞給另一個函數,併在另一個函數執行完畢後被調用。

使用回調函數時,需要註意以下幾點:

  1. 回調函數必須是一個函數,可以是內置函數或自定義函數。
  2. 回調函數必須作為參數傳遞給另一個函數,併在另一個函數執行完畢後被調用。
  3. 回調函數的參數和返回值必須符合另一個函數的要求。

示例:

function add(a, b, callback) {
  var result = a + b;
  callback(result);
}

add(1, 2, function(result) {
  console.log(result);
});

在上面的例子中,add函數有三個參數,其中callback函數是回調函數,當add函數執行完畢後,會調用這個回調函數並傳遞計算結果。

在調用add函數時,傳入了兩個數字和一個回調函數。回調函數在add函數執行完畢後被調用,並列印出計算結果。

什麼是箭頭函數?

JavaScript中的箭頭函數是ES6(ECMAScript 2015)中添加的一種新函數類型。箭頭函數是一種更簡潔的函數聲明方式,同時也有不同於傳統函數的一些特性。

箭頭函數的語法形式為:(參數)=> {函數體}

其中,參數和函數體之間由箭頭符號(=>)連接。

箭頭函數與傳統函數的一些不同點如下:

  1. 箭頭函數沒有自己的this對象,它的this繼承自父作用域。這意味著在箭頭函數中使用this時,它實際上是指向父作用域中的this,而不是箭頭函數自己的this。

  2. 箭頭函數沒有arguments對象,但可以使用rest參數(...args)取代。

  3. 如果箭頭函數只有一個參數,可以省略小括弧。

  4. 如果函數體只有一條語句,可以省略大括弧和return語句。

箭頭函數的應用場景:

  1. 作為回調函數。箭頭函數的簡潔語法和繼承父作用域的this對象使它非常適合作為回調函數。

  2. 與數組方法結合使用。在數組方法中,箭頭函數比傳統函數更具可讀性和簡潔性。

  3. 與PromiseAPI結合使用。在PromiseAPI中,箭頭函數可以幫助我們更方便地處理非同步代碼。

總之,箭頭函數是一種更簡潔、更易讀、更方便的函數類型,它的使用可以提高代碼的可讀性和開發效率。

// 傳統函數
function greeting(name) {
  console.log("Hello, " + name);
}

// 箭頭函數
const greetingArrow = name => {
  console.log("Hello, " + name);
}

greeting("Tom"); // 輸出 "Hello, Tom"
greetingArrow("Jerry"); // 輸出 "Hello, Jerry"
const shoppingCart = [
   { id: 1, name: "Shirt", price: 25 },
   { id: 2, name: "Pants", price: 50 },
   { id: 3, name: "Shoes", price: 100 }
];

const VAT_RATE = 0.2; // 稅率

const calculateTotalPrice = shoppingCart => {
  // 使用 reduce 方法計算購物車中所有商品的總價
  const totalPrice = shoppingCart.reduce((acc, product) => acc + product.price, 0);
  
  // 計算總價和稅費
  const total = totalPrice + (totalPrice * VAT_RATE);
  
  // 四捨五入並保留兩位小數
  return Math.round(total * 100) / 100;
}

const total = calculateTotalPrice(shoppingCart);
console.log("Total Price: $" + total); // 輸出 "Total Price: $210"

什麼是Promise?如何使用Promise?

Promise是JavaScript中一種非同步編程的解決方案,它表示一個尚未完成但預計將來會完成的操作,並提供一種處理該操作結果的方式。

在Promise中,我們可以定義需要執行的操作,以及當操作完成後需要執行的一系列回調函數。Promise既可以表示操作失敗的情況,也可以表示操作成功的情況。

Promise具有以下特點:

1. Promise對象的狀態不受外界影響。一旦狀態改變,就不會再變,任何時候都可以得到這個結果。

2. Promise對象的狀態一旦改變,就不能再改變。如果不設置回調函數,Promise內部的錯誤不會影響到外部。

3. Promise 對象提供了鏈式操作,可以使其代碼更加簡潔易讀。

const promise = new Promise((resolve, reject) => {
  // 非同步操作
  setTimeout(function(){
    const num = Math.random();
    if(num < 0.5){
      resolve(num)
    } else {
      reject(num)
    }
  }, 1000)
})

promise.then((res)=>{
  console.log("操作成功,結果為:", res);
}).catch((err)=>{
  console.log("操作失敗,結果為:", err);
})

上述代碼中,我們通過Promise構造函數創建了一個Promise對象,在非同步操作完成後通過resolve方法表示操作成功並返回一個結果,通過reject方法表示操作失敗並返回一個錯誤信息。在then和catch方法中,我們分別定義了操作成功和操作失敗後需要執行的回調函數。

 

Promise有三種狀態:pending、fulfilled和rejected。當非同步操作執行時,它最初處於pending狀態。如果非同步操作成功,則狀態變為fulfilled,並返回一個值,如果發生錯誤,則狀態變為rejected,並返回一個錯誤對象。

下麵是使用Promise的簡單示例:

function fetchData() {
  return new Promise((resolve, reject) => {
    fetch('https://jsonplaceholder.typicode.com/users')
      .then(response => response.json())
      .then(data => resolve(data))
      .catch(error => reject(error))
  })
}

fetchData()
  .then(data => console.log(data))
  .catch(error => console.error(error))

上面的代碼中,fetchData函數返回一個Promise。如果非同步操作成功,它會調用resolve回調函數,並傳遞數據對象。如果發生錯誤,它會調用reject回調函數,並傳遞一個錯誤對象。

在這個示例中,我們使用了fetch API來獲取數據。通過調用response.json(),我們將響應對象轉換為JSON格式的數據。最後,我們處理數據對象或錯誤對象,您可以在.then()和.catch()方法中進行操作。

在處理非同步操作時,Promise非常強大且易於使用。它可以簡化代碼並提高可讀性。不要猶豫,嘗試使用Promise來處理非同步操作。

什麼是async/await? 如何使用async/await?

async/await 是一種用於簡化非同步操作的語法特性。它基於 Promise 對象,利用 async 和 await 關鍵字簡化 Promise 的鏈式調用和錯誤處理,使非同步代碼看起來像同步代碼。

async 表示一個函數是非同步的,並返回一個 Promise 對象。await 表示等待 Promise 對象的解決,並返回 Promise 對象的解決值。使用 async/await 可以避免回調地獄,提高代碼的可讀性和可維護性。

使用 async/await 的基本流程如下:

1.定義一個非同步函數,使用 async 關鍵字標記。

2.在函數中使用 await 關鍵字等待 Promise 對象處理完成,返回 Promise 對象的解決值。

3.處理 Promise 對象的錯誤,使用 try...catch 捕獲非同步操作的錯誤。

例如:

 

async function getData() {
  try {
    let response = await fetch('https://jsonplaceholder.typicode.com/users');
    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.log(error);
  }
}

getData();

在上面的例子中,我們定義一個非同步函數`getData`,使用 await 關鍵字等待 fetch() 方法返回的 Promise 對象處理完成,然後再使用 await 關鍵字等待 response 對象的 json() 方法返回的 Promise 對象處理完成,最後將返回的 JSON 數據輸出。同時使用 try...catch 捕獲非同步操作的錯誤,便於進行錯誤處理。

使用 async/await 可以大大簡化 Promise 的鏈式調用和錯誤處理,提高代碼的可讀性和可維護性。但需要註意的是,await 只能在 async 函數內部使用,否則會報語法錯誤。

在黑夜裡夢想著光,心中覆蓋悲傷,在悲傷里忍受孤獨,空守一絲溫暖。 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在。 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:併發的事務在運行過程中會出現一些可能引發一致性問題的現象,本篇將詳細分析一下。 本文分享自華為雲社區《MySQL讀取的記錄和我想象的不一致——事物隔離級別和MVCC》,作者:磚業洋__。 事務的特性簡介 1.1 原子性(Atomicity) 要麼全做,要麼全不做,一系列操作都是不可分割的,如果 ...
  • 之前寫過一篇文章“SQL Server如何找出視圖依賴的對象和視圖嵌套層數”,這裡我介紹一下Oracle資料庫中如何找出視圖的依賴對象以及視圖嵌套層數關係。主要通過DBA_DEPENDENCIES這個系統視圖(這個系統視圖中包含有對象的依賴關係數據)。另外,我們使用了Oracle的樹形查詢(層級查詢 ...
  • > ViewModel做為架構組件的三元老之一,是實現MVVM的有力武器。 ### ViewModel的設計目標 ViewModel的基本功能就是管理UI的數據。其實,從職責上來說,這又是對Activity和Fragment的一次功能拆分。以前存儲在它們內部的數據,需要它們自己處理創建,更新,存儲, ...
  • 隨著業務的發展及版本迭代,客戶端工程中不斷增加新的業務邏輯、引入新的資源,隨之而來的問題就是安裝包體積變大,前期各個業務模塊通過無用資源刪減、大圖壓縮或轉上雲、AB實驗業務邏輯下線或其他手段在降低包體積上取得了一定的成果。 ...
  • 本期直播《“元”來如此,“服務”直達——揭秘鴻蒙新流量陣地》聚焦**元服務**的**商業流量價值**,介紹元服務提供的服務直達和卡片動態變化等**輕量化服務**。網約停車旗艦平臺小強停車做客直播間,分享小強停車在HarmonyOS生態中,如何通過元服務為廣大用戶帶來更加便捷易用的線上預約停車體驗。快 ...
  • ## 顏色 1. **RGB** (紅,綠,藍)三種顏色的集合,最低值是0(十六進位00)到最高值255(十六進位FF) 2. **HSL** H色相(0-360),S飽和度(百分比),L亮度(百分比) 3. (不)透明度 **rgba、hsla** (新版瀏覽器可不寫a,直接寫4個值) ## li ...
  • ### 前言 前不久,在我的一個項目中,需要展示一個橫向滾動的標簽頁,它支持滑鼠橫向拖動和點擊切換。在實現的過程中,我發現這個小功能需要同時用到前端的三輛馬車,但是實現難度不高,而且最終效果還不錯,是個難得的初學者項目,於是萌生了寫這篇文章的想法,希望對初學者有所幫助。同時為了避免初學者學習框架,我 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 使用背景: 1.因為svg圖標在任何設備下都可以高清顯示,不會模糊。而icon會在顯卡比較低的電腦上有顯示模糊的情況 2.svg圖標在頁面render時 速度會比icon稍微快一點 3.實現小程式換膚功能 ;方案見:www.yuque.c ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...