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