日韩欧美人妻无码精品白浆,夜夜嗨AV免费入口,国产欧美官网在线看,高校回应聋哑女生因长相完美被质疑

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

js幾種函數(shù)定義方式有什么區(qū)別?

freeflydom
2025年6月11日 9:45 本文熱度 125

函數(shù) 作為 JS 的一等公民,隨處可見它的身影。

我理解的它最主要作用就是用來提取重復代碼,但凡有 JS 代碼需要復制粘貼的時候,那么這時候就可以考慮使用函數(shù)封裝了。

當函數(shù)寫在對象中的時候,這時候它變了一個名字,稱之為 方法。

function 聲明

在使用 function 關鍵字聲明函數(shù)時,需注意聲明提升問題,意思就是 function 聲明的函數(shù),不存在先后順序,任意位置都可以調(diào)用。

function test() {
  console.log('前端路引');
}
test() // 調(diào)用函數(shù)

test 就是函數(shù)的名字,函數(shù)名的規(guī)則和變量聲明差不多,只要不是數(shù)字和特殊字符開頭,語法規(guī)則都是允許的,包括都可以使用中文定義函數(shù),雖然不建議這么使用!

function 測試() {
  console.log('前端路引');
}
測試() // 調(diào)用函數(shù)

聲明提升

function 定義的函數(shù)會提升到作用域頂部,所以可以在函數(shù)定義之前調(diào)用,比如:

test() // 此處可以調(diào)用 function 聲明的函數(shù)
const var1 = '前端路引 -- 1'
console.log(var1)
function test() {
  console.log('前端路引 -- 2');
}

輸出:

前端路引 -- 2
前端路引 -- 1

包括寫在 if 判斷中的 function 都會提升到作用域頂部,比如:

test()
if (false) {
  console.log('前端路引 -- 1'); // 此行代碼不會執(zhí)行
  function test() {
    console.log('前端路引 --2');
  }
}

輸出:

前端路引 -- 2

所以不建議在條件語句中去使用 function 聲明函數(shù)!

函數(shù)表達式

函數(shù)表達式就是使用一個變量來保存函數(shù),這種寫法有個好處是可以控制定義函數(shù)的邏輯。

聲明方式:

const test = function() {
  console.log('前端路引');
}
test()

表達式聲明的函數(shù)只能在聲明之后調(diào)用,如果在聲明之前調(diào)用,代碼會報錯:

test() // 報錯 ReferenceError: test is not defined
const test = function() {
  console.log('前端路引');
}

使用 var 聲明時會報錯 TypeError: test is not a function:

test() // 報錯 TypeError: test is not a function
var test = function() {
  console.log('前端路引');
}

在 if 中聲明的函數(shù)表達式,在外部無法調(diào)用:

if (false) {
  const test = function() {
    console.log('前端路引');
  }
}
test() // 報錯 ReferenceError: test is not defined

箭頭函數(shù)

箭頭函數(shù)的聲明與函數(shù)表達式有些相似,都需要通過變量保存。

聲明方式:

const test1 = () => {
  console.log('前端路引');
}
const test2 = (a, b) => a + b; // 單行時候可以省略花括號,直接返回值
// 等價于
// const test2 = (a, b) => {return a + b}
test1() // 輸出:前端路引
console.log(test2(1, 2)) // 輸出:3

箭頭函數(shù)和函數(shù)表達式的區(qū)別:

  • 箭頭函數(shù)自身沒有 this 綁定,繼承外層作用域的 this
const test1 = function () {
  console.log(this)
}
const test2 = () => {
  console.log(this)
}
test1.bind({a: '123'})() // 獲得對象 {a: '123'}
test2.bind({a: '123'})() // 獲得全局對象 window
  • 由于沒有 this,所以也無法作為構造函數(shù)使用,不能使用 new 實例化。
const test1 = function () {
  console.log('前端路引')
}
const test2 = () => {
  console.log('前端路引')
}
new test1()
new test2() // 報錯 TypeError: test2 is not a constructor
  • 箭頭函數(shù)也沒有 arguments 對象,所以無法通過 arguments 相關方法,比如 arguments.callee 獲取函數(shù)自身。
const test1 = function () {
  console.log(arguments) // 獲取到參數(shù)對象
}
const test2 = () => {
  console.log(arguments) // 報錯 ReferenceError: arguments is not defined
}
test1('前端路引')
test2('前端路引')

生成器函數(shù)

ES6 新增的聲明方式,常規(guī)的業(yè)務代碼一般很少使用(也可能是我的段位太低~~)。

function* test() {
  yield 1;
  yield 2;
}
const temp = test()
console.log(temp.next()) // 輸出:{value: 1, done: false}
console.log(temp.next()) // 輸出:{value: 2, done: false}
console.log(temp.next()) // 輸出:{value: undefined, done: true}

這種方式可以使用 yield 暫停函數(shù)執(zhí)行,多用于異步迭代場景。

看一個異步使用 yield 例子:

function* testAsync() {
  const data = yield new Promise(resolve => {
    setTimeout(() => resolve('Hello World'), 1000); // 模擬異步操作
  });
  console.log(data); // 此處的 data 是 next 傳入數(shù)據(jù),不是 Promise 返回數(shù)據(jù)
}
 
async function run() {
  const generator = testAsync();
  const result = await generator.next().value; // 等待 Promise
  generator.next(result); // 將結果傳遞回生成器并繼續(xù)執(zhí)行
}
run()

構造函數(shù) Function 聲明

雖然不建議使用這種聲明函數(shù),咱們學習了解一下還是沒問題的。

const test = new Function('a', 'b', 'return a + b');
console.log(test(1, 2))

問題:

1、通過字符串動態(tài)生成代碼,存在安全風險,容易出現(xiàn)代碼注入攻擊。
2、每次都會解析字符串,性能會比較低。

寫在最后

函數(shù) 作為 JS 語言中的一等公民,幾種聲明方式區(qū)別是面試中的???,經(jīng)常被問及 箭頭函數(shù) 與 function 有哪些區(qū)別。

函數(shù) 是基礎,也是函數(shù)式編程的核心,必須熟練掌握~~

轉自https://www.cnblogs.com/linx/p/18922032


該文章在 2025/6/11 9:45:29 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved