
批改狀態(tài):合格
老師批語(yǔ):
命名函數(shù)——有名字的函數(shù)
function getName(username){
return 'hi '+username;
}
匿名函數(shù)——沒有名字的函數(shù)
function (a){
return a++;
}
匿名函數(shù)有三種寫法:
函數(shù)表達(dá)式
就是把函數(shù)聲明賦值給一個(gè)變量,用這個(gè)變量調(diào)用函數(shù)
const getNames = function (username) {
return username + "20歲了";
}
IIFE快速執(zhí)行函數(shù)
立即執(zhí)行函數(shù),執(zhí)行完就釋放了,不會(huì)對(duì)全局帶來污染,用來創(chuàng)建臨時(shí)作用域——閱后即焚
console.log((function (APP_NAME) {
return APP_NAME;
})("商城小程序"));
箭頭函數(shù)
首先先寫一個(gè)匿名函數(shù)
let f1 = function (a, b) {
return a + b;
}
用匿名函數(shù)轉(zhuǎn)化成箭頭函數(shù)的關(guān)鍵就是:
f1 = (a,b){return a+b};
如果函數(shù)有一個(gè)參數(shù)那么還可以繼續(xù)簡(jiǎn)化,參數(shù)括號(hào)可以省略
如果函數(shù)只有一條執(zhí)行語(yǔ)句,那大括號(hào)和return也可以省略
let f2 = a => a++;
如果函數(shù)沒有參數(shù),那么括號(hào)不能省略,或用$
或_
代替
let f3 = () => "輸出";
//或
f3 = $ => "輸出";
//或
f3 = _ => "輸出";
類型 | 名稱 | 值 |
---|---|---|
number | 數(shù)值 | 1,2,3等數(shù)字 |
string | 字符串 | ‘123’ |
Boolean | 布爾類型 | true或false |
undefined | 聲明未賦值的值 | undefined |
null | 空對(duì)象 | null |
1.數(shù)組
const arr=["手機(jī)",2,1000];
數(shù)組用一對(duì)中括號(hào)[]
包裹起來,數(shù)組里可以有多種數(shù)據(jù)類型的數(shù)據(jù),可以嵌套數(shù)組,是一個(gè)典型的多值類型;
數(shù)組的索引從0開始到length-1結(jié)束;
數(shù)組的類型判斷用Array.isArray()函數(shù)來判斷,如果是則返回true;
2.對(duì)象
const obj={name:"手機(jī)",num:2,price:1000}
對(duì)象更像一個(gè)語(yǔ)義化的數(shù)組,訪問對(duì)象屬性的方式可以是obj["name"]
也可以是obj.num
;
當(dāng)屬性名出現(xiàn)非法標(biāo)識(shí)符時(shí),必須使用數(shù)組方式([])來正確訪問;
本質(zhì)上來說, 對(duì)象, 就是變量與函數(shù)的封裝, 對(duì)象內(nèi)部, 變量叫屬性, 函數(shù)叫方法
obj = {
// name, num, price: 屬性, 類似于變量
name: "手機(jī)",
num: 3,
price: 7000,
// total: 方法,實(shí)際上還是一個(gè)屬性,只不過它的值是一個(gè)函數(shù)
total: function () {
// let str = obj.name + " 總計(jì): " + obj.num * obj.price + " 元 ";
// 模板字面量, 來簡(jiǎn)化, 內(nèi)部有變量的字符串
// let str = obj.name + " 總計(jì): " + obj.num * obj.price + " 元 ";
// 反引號(hào)聲明的模板字符串, 可以插入變量/表達(dá)式, 這叫"插值"
// 應(yīng)該是對(duì)象內(nèi)部, 使用 當(dāng)前對(duì)象的一個(gè)引用, 這樣才獨(dú)立于外部對(duì)象
// let str = `${obj.name} 總計(jì) ${obj.num * obj.price} 元`;
// this: 始終與當(dāng)前對(duì)象綁定(執(zhí)行環(huán)境 / 執(zhí)行上下文 )
// this = obj,這樣我們?cè)谛薷膶?duì)象名稱后不會(huì)影響內(nèi)部方法的調(diào)用和計(jì)算
let str = `${this.name} 總計(jì) ${this.num * this.price} 元`;
return str;
},
};
調(diào)用對(duì)象里面的方法用 obj.total()
;
實(shí)際工作中我們用到更多的是對(duì)象和數(shù)組組合使用的,比如:
// obj是一個(gè)由三個(gè)對(duì)象構(gòu)成的數(shù)組
obj = [
{ name: "手機(jī)", num: 2, price: 5000 },
{ name: "電腦", num: 2, price: 5000 },
{ name: "相機(jī)", num: 2, price: 5000 },
];
利用高階函數(shù)來計(jì)算一下商品總和:
// 求三個(gè)商品的總和
let res = obj.map(item => item.num * item.price).reduce((acc, cur) => acc + cur);
3.函數(shù)
函數(shù)本身是一種數(shù)據(jù)類型,也是對(duì)象
函數(shù)當(dāng)做一種數(shù)據(jù)類型的好處有:
充當(dāng)函數(shù)的返回值或參數(shù),當(dāng)參數(shù)就是個(gè)回調(diào)函數(shù),當(dāng)返回值可以創(chuàng)建一個(gè)閉包
function f1(callback) {
console.log(callback());
}
//函數(shù)作為參數(shù),即f1的參數(shù)是一個(gè)函數(shù)
// 調(diào)用f1,傳一個(gè)匿名函數(shù)
f1(function () {
return "hello world";
});
// 函數(shù)當(dāng)返回值,即返回值為一個(gè)函數(shù)
function f2() {
let a = 1;
return function () {
return a++;
}
}
console.log(f2());//f2是一個(gè)函數(shù)
const f = f2();
console.log(f2()());//這種寫法也可,返回值1
console.log(f());//返回1
console.log(f());//返回2
console.log(f());//返回3
console.log(f());//返回4
function func(a, b) {
return a + b;
}
這樣一個(gè)函數(shù),我們可以用func.name
去獲取函數(shù)的函數(shù)名,func.length
來獲取函數(shù)的參數(shù)個(gè)數(shù),func.email="myemial@qq.com"
來給func函數(shù)添加屬性,然后用func.email
來調(diào)用。
js的世界是如此的高深莫測(cè),晦澀難懂,但又有趣又神秘,希望在這片蔚藍(lán)之海不會(huì)迷失自己吧。
繼續(xù)加油!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)