javascript
JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】
學(xué)習(xí)地址:
JavaScript基礎(chǔ)、高級(jí)學(xué)習(xí)筆記匯總表【尚硅谷最新版JavaScript基礎(chǔ)全套教程完整版(140集實(shí)戰(zhàn)教學(xué),JS從入門到精通)】
目? ?錄
P53 53.尚硅谷_JS基礎(chǔ)_函數(shù)的返回值?11:21
P54?54.尚硅谷_JS基礎(chǔ)_實(shí)參可以是任何值?21:50
函數(shù)返回值練習(xí)1
函數(shù)返回值練習(xí)2
函數(shù)返回值練習(xí)3
P55?55.尚硅谷_JS基礎(chǔ)_返回值的類型?11:42
P56?56.尚硅谷_JS基礎(chǔ)_立即執(zhí)行函數(shù)?04:49
P57?57.尚硅谷_JS基礎(chǔ)_方法?15:30
將函數(shù)作為對(duì)象的屬性保存
枚舉對(duì)象中的屬性【使用for ... in 語(yǔ)句】
P58?58.尚硅谷_JS基礎(chǔ)_全局作用域?21:23
作用域
聲明提前
變量的聲明提前
函數(shù)的聲明提前
P59?59.尚硅谷_JS基礎(chǔ)_函數(shù)作用域?21:41
函數(shù)作用域
函數(shù)作用域的聲明提前特性
P60?60.尚硅谷_JS基礎(chǔ)_debug?13:54
局部變量/全局變量【小練習(xí)】
火狐瀏覽器debug
谷歌瀏覽器debug
ie瀏覽器debug
P61?61.尚硅谷_JS基礎(chǔ)_this?11:03
P62?62.尚硅谷_JS基礎(chǔ)_this補(bǔ)充?05:39
P63?63.尚硅谷_JS基礎(chǔ)_使用工廠方法創(chuàng)建對(duì)象 10:48
使用工廠方法創(chuàng)建對(duì)象【大批量的創(chuàng)建對(duì)象】
P64?64.尚硅谷_JS基礎(chǔ)_構(gòu)造函數(shù)?24:56
instanceof:檢查一個(gè)對(duì)象是否是一個(gè)類的實(shí)例
this使用情況的總結(jié)
P53 53.尚硅谷_JS基礎(chǔ)_函數(shù)的返回值?11:21
創(chuàng)建一個(gè)函數(shù),用來(lái)計(jì)算三個(gè)數(shù)的和。
可以使用 return 來(lái)設(shè)置函數(shù)的返回值,語(yǔ)法:return 值;
return后的值將會(huì)作為函數(shù)的執(zhí)行結(jié)果返回,可以定義一個(gè)變量,來(lái)接收該結(jié)果。在函數(shù)中return后的語(yǔ)句都不會(huì)執(zhí)行。
- 如果return語(yǔ)句后不跟任何值就相當(dāng)于返回一個(gè)undefined;
- 如果函數(shù)中不寫return,則也會(huì)返回undefined;
- return后可以跟任意類型的值。
? ?
? ?
P54?54.尚硅谷_JS基礎(chǔ)_實(shí)參可以是任何值?21:50
函數(shù)返回值練習(xí)1
定義一個(gè)函數(shù),判斷一個(gè)數(shù)字是否是偶數(shù),如果是返回true,否則返回false。
? ?
函數(shù)返回值練習(xí)2
定義一個(gè)函數(shù),可以根據(jù)半徑計(jì)算一個(gè)圓的面積,并返回計(jì)算結(jié)果。
函數(shù)返回值練習(xí)3
創(chuàng)建一個(gè)函數(shù),可以在控制臺(tái)中輸出一個(gè)人的信息,可以輸出人的 name age gender address。
實(shí)參可以是任意的數(shù)據(jù)類型,也可以是一個(gè)對(duì)象。
當(dāng)我們的參數(shù)過(guò)多時(shí),可以將參數(shù)封裝到一個(gè)對(duì)象中,然后通過(guò)對(duì)象傳遞。
實(shí)參可以是一個(gè)對(duì)象,也可以是一個(gè)函數(shù)。匿名函數(shù)作為實(shí)參,傳遞給函數(shù)。
P55?55.尚硅谷_JS基礎(chǔ)_返回值的類型?11:42
返回值可以是任意的數(shù)據(jù)類型,也可以是一個(gè)對(duì)象,也可以是一個(gè)函數(shù)。
? ? ??
??
函數(shù)名+()返回的是這個(gè)函數(shù)的返回值,函數(shù)名:返回的是這個(gè)函數(shù),fun3的返回值是fun4,所以fun3()=fun4,又fun4()返回“我是fun4”,所以fun3()()=“我是fun4”。
P56?56.尚硅谷_JS基礎(chǔ)_立即執(zhí)行函數(shù)?04:49
直接這樣聲明函數(shù),會(huì)報(bào)錯(cuò)。{}內(nèi)的內(nèi)容,被當(dāng)成了一個(gè)代碼塊,瀏覽器不認(rèn)識(shí)“function()”。
? // 加括號(hào)表示整體!
用“()”將函數(shù)體圈起來(lái),表示這是一個(gè)整體(不是獨(dú)立部分),不報(bào)錯(cuò)!
立即執(zhí)行函數(shù):函數(shù)定義完,立即被調(diào)用,這種函數(shù)叫做立即執(zhí)行函數(shù),立即執(zhí)行函數(shù)往往只會(huì)執(zhí)行一次。
P57?57.尚硅谷_JS基礎(chǔ)_方法?15:30
將函數(shù)作為對(duì)象的屬性保存
函數(shù)也可以稱為對(duì)象的屬性,如果一個(gè)函數(shù)作為一個(gè)對(duì)象的屬性保存,那么我們稱這個(gè)函數(shù)是這個(gè)對(duì)象的方法。
調(diào)用這個(gè)函數(shù)就說(shuō)調(diào)用對(duì)象的方法(method),但是它只是名稱上的區(qū)別沒(méi)有其他的區(qū)別。
枚舉對(duì)象中的屬性【使用for ... in 語(yǔ)句】
語(yǔ)法:
for(var 變量 in 對(duì)象){
? ?語(yǔ)句...
}
for...in語(yǔ)句:對(duì)象中有幾個(gè)屬性,循環(huán)體就會(huì)執(zhí)行幾次,每次執(zhí)行時(shí),會(huì)將對(duì)象中的一個(gè)屬性的名字賦值給變量。
P58?58.尚硅谷_JS基礎(chǔ)_全局作用域?21:23
作用域
作用域:作用域是指一個(gè)變量的作用的范圍。
在JS中一共有兩種作用域:
? ?1.全局作用域
? ? ? ? ?- 直接編寫在script標(biāo)簽中的JS代碼,都在全局作用域。
? ? ? ? ?- 全局作用域在頁(yè)面打開(kāi)時(shí)創(chuàng)建,在頁(yè)面關(guān)閉時(shí)銷毀。
? ? ? ? ?- 在全局作用域中有一個(gè)全局對(duì)象window,它代表的是一個(gè)瀏覽器的窗口,它由瀏覽器創(chuàng)建我們可以直接使用。
? ? ? ? ?- 在全局作用域中:創(chuàng)建的變量都會(huì)作為window對(duì)象的屬性保存;創(chuàng)建的函數(shù)都會(huì)作為window對(duì)象的方法保存。
? ? ? ? ?- 全局作用域中的變量都是全局變量,在頁(yè)面的任意的部分都可以訪問(wèn)的到。
? ?2.函數(shù)作用域
聲明提前
變量的聲明提前
變量的聲明提前:
- 使用var關(guān)鍵字聲明的變量,會(huì)在所有的代碼執(zhí)行之前被聲明(但是不會(huì)賦值);
- 但是如果聲明變量時(shí)不使用var關(guān)鍵字,則變量不會(huì)被聲明提前。
函數(shù)的聲明提前
函數(shù)的聲明提前:
- 使用函數(shù)聲明形式創(chuàng)建的函數(shù) function 函數(shù)(){},它會(huì)在所有的代碼執(zhí)行之前就被創(chuàng)建,所以我們可以在函數(shù)聲明前來(lái)調(diào)用函數(shù);
- 使用函數(shù)表達(dá)式創(chuàng)建的函數(shù),不會(huì)被聲明提前,所以不能在聲明前調(diào)用。
P59?59.尚硅谷_JS基礎(chǔ)_函數(shù)作用域?21:41
函數(shù)作用域
函數(shù)作用域:
函數(shù)作用域的聲明提前特性
在函數(shù)作用域也有聲明提前的特性:
- 使用var關(guān)鍵字聲明的變量,會(huì)在函數(shù)中所有的代碼執(zhí)行之前被聲明;
- 函數(shù)聲明也會(huì)在函數(shù)中所有的代碼執(zhí)行之前執(zhí)行。
在函數(shù)中,不適用var聲明的變量都會(huì)成為全局變量。
????
定義形參就相當(dāng)于在函數(shù)作用域中聲明了變量。
P60?60.尚硅谷_JS基礎(chǔ)_debug?13:54
局部變量/全局變量【小練習(xí)】
????????
火狐瀏覽器debug
谷歌瀏覽器debug
ie瀏覽器debug
P61?61.尚硅谷_JS基礎(chǔ)_this?11:03
解析器在調(diào)用函數(shù)每次都會(huì)向函數(shù)內(nèi)部傳遞進(jìn)一個(gè)隱含的參數(shù),這個(gè)隱含的參數(shù)就是this,this指向的是一個(gè)對(duì)象,這個(gè)對(duì)象我們稱為函數(shù)執(zhí)行的上下文對(duì)象。
根據(jù)函數(shù)的調(diào)用方式的不同,this會(huì)指向不同的對(duì)象:
加括號(hào)是調(diào)用函數(shù),這塊是將fun對(duì)象賦值給sayName屬性。
this指向的是一個(gè)對(duì)象,window對(duì)象調(diào)用的fun方法,指向window;同理obj對(duì)象調(diào)用sayHello,this指向obj。
<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><script type="text/javascript">/** 解析器在調(diào)用函數(shù)每次都會(huì)向函數(shù)內(nèi)部傳遞進(jìn)一個(gè)隱含的參數(shù),* 這個(gè)隱含的參數(shù)就是this,this指向的是一個(gè)對(duì)象,* 這個(gè)對(duì)象我們稱為函數(shù)執(zhí)行的 上下文對(duì)象,* 根據(jù)函數(shù)的調(diào)用方式的不同,this會(huì)指向不同的對(duì)象* 1.以函數(shù)的形式調(diào)用時(shí),this永遠(yuǎn)都是window* 2.以方法的形式調(diào)用時(shí),this就是調(diào)用方法的那個(gè)對(duì)象*/function fun() {console.log(this.name);}var obj = {name: "孫悟空",sayName: fun};var obj2 = {name: "沙和尚",sayName: fun};console.log(obj.sayName == fun); // truevar name = "全局的name屬性";obj.sayName();//以函數(shù)形式調(diào)用,this是windowfun();//以方法的形式調(diào)用,this是調(diào)用方法的對(duì)象obj.sayName();obj2.sayName();</script></head><body></body> </html>P62?62.尚硅谷_JS基礎(chǔ)_this補(bǔ)充?05:39
<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><script type="text/javascript">var name = "全局"; // 創(chuàng)建一個(gè)name變量//創(chuàng)建一個(gè)fun()函數(shù)function fun() {console.log(this.name);}//創(chuàng)建兩個(gè)對(duì)象var obj = {name: "孫悟空",sayName: fun};var obj2 = {name: "沙和尚",sayName: fun};//我們希望調(diào)用obj.sayName()時(shí)可以輸出obj的名字obj.sayName();obj2.sayName();</script></head><body></body> </html>P63?63.尚硅谷_JS基礎(chǔ)_使用工廠方法創(chuàng)建對(duì)象 10:48
使用工廠方法創(chuàng)建對(duì)象【大批量的創(chuàng)建對(duì)象】
??
P64?64.尚硅谷_JS基礎(chǔ)_構(gòu)造函數(shù)?24:56
使用工廠方法創(chuàng)建的對(duì)象,使用的構(gòu)造函數(shù)都是Object,所以創(chuàng)建的對(duì)象都是Object這個(gè)類型,就導(dǎo)致我們無(wú)法區(qū)分出多種不同類型的對(duì)象。
創(chuàng)建一個(gè)構(gòu)造函數(shù),專門用來(lái)創(chuàng)建Person對(duì)象的。
構(gòu)造函數(shù)就是一個(gè)普通的函數(shù),創(chuàng)建方式和普通函數(shù)沒(méi)有區(qū)別,不同的是,構(gòu)造函數(shù)習(xí)慣上首字母大寫。
構(gòu)造函數(shù)和普通函數(shù)的區(qū)別就是:調(diào)用方式的不同;普通函數(shù)是直接調(diào)用,而構(gòu)造函數(shù)需要使用new關(guān)鍵字來(lái)調(diào)用。
構(gòu)造函數(shù)的執(zhí)行流程:
使用同一個(gè)構(gòu)造函數(shù)創(chuàng)建的對(duì)象,我們稱為一類對(duì)象,也將一個(gè)構(gòu)造函數(shù)稱為一個(gè)類。我們將通過(guò)一個(gè)構(gòu)造函數(shù)創(chuàng)建的對(duì)象,稱為是該類的實(shí)例。
???
- 工廠方法創(chuàng)建對(duì)象:因?yàn)槊總€(gè)函數(shù)里都是new Object(),所以返回的是Object。
- 構(gòu)造函數(shù)是new 你自己定義的函數(shù)(),返回的名稱也就是你自己定義的。
instanceof:檢查一個(gè)對(duì)象是否是一個(gè)類的實(shí)例
使用instanceof可以檢查一個(gè)對(duì)象是否是一個(gè)類的實(shí)例。
? ?語(yǔ)法:
? ? ??對(duì)象 instanceof 構(gòu)造函數(shù)
如果是,則返回true,否則返回false。
所有的對(duì)象都是Object的后代,所以任何對(duì)象和Object做instanceof檢查時(shí) 都會(huì)返回true。
this使用情況的總結(jié)
this的使用情況:
總結(jié)
以上是生活随笔為你收集整理的JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript基础07-day09
- 下一篇: JavaScript基础09-day11