日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

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

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

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

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

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

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

function 聲明

在使用 function 關(guān)鍵字聲明函數(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,所以也無法作為構(gòu)造函數(shù)使用,不能使用 new 實例化。
const test1 = function () {
  console.log('前端路引')
}
const test2 = () => {
  console.log('前端路引')
}
new test1()
new test2() // 報錯 TypeError: test2 is not a constructor
  • 箭頭函數(shù)也沒有 arguments 對象,所以無法通過 arguments 相關(guān)方法,比如 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è)務(wù)代碼一般很少使用(也可能是我的段位太低~~)。

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); // 將結(jié)果傳遞回生成器并繼續(xù)執(zhí)行
}
run()

構(gòu)造函數(shù) Function 聲明

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

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

問題:

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

寫在最后

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

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

轉(zhuǎn)自https://www.cnblogs.com/linx/p/18922032


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

日韩久久一区| 国产欧美日韩在学校概| 在县城人AV| 开心色国产丁香婷婷综合一区| 天天干国产91| 国产性爱二区| 麻豆大神最新地址| 麻豆国产一区二区三区三州| 97se午夜福利| 日本午夜官网| 少妇作爱3P| 亚洲一区二区日本久久久| 久久成人国产| 国产精品久久久久久理论电影| 亚洲自拍偷拍综合图| 欧美性 国产 家庭 乱| 日韩电影成人无码| 91精彩视频人妻| 欧美一三一四黄片| www.黑人日她B av网站| 日韩大码胖女在线网站| 一区日韩中文人妻| 欧美精品社区一区二区三区| 大胆人体免费视频国产| 欧美日韩一区=区五区| 一级看黄平台| 国产换妻在线播放网址| 中文字幕人妻综合区| 亚洲欧美中韩网站| 国产欧美另类五月| 欧美熟女群二区| 久久精品性生活片| 在线免费看大鸡巴视频网站| 老鸭窝www| 少妇高潮小视频| 大香蕉网站视频在线观看| 中字AV无码精品影院| 色婷婷二三区一| 黄色美女视频91免费看| 欧美…直播…寂寞…少妇……| 国产亚洲自拍色的|