日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】

發(fā)布時間:2024/9/30 javascript 37 豆豆

學(xué)習(xí)地址:

  • 谷粒學(xué)院——尚硅谷
  • 嗶哩嗶哩網(wǎng)站——尚硅谷最新版JavaScript基礎(chǔ)全套教程完整版(140集實(shí)戰(zhàn)教學(xué),JS從入門到精通)

  • 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ù)作用域:

  • 調(diào)用函數(shù)時創(chuàng)建函數(shù)作用域,函數(shù)執(zhí)行完畢以后,函數(shù)作用域銷毀。
  • 每調(diào)用一次函數(shù)就會創(chuàng)建一個新的函數(shù)作用域,他們之間是互相獨(dú)立的。
  • 在函數(shù)作用域中可以訪問到全局作用域的變量,在全局作用域中無法訪問到函數(shù)作用域的變量。
  • 當(dāng)在函數(shù)作用域操作一個變量時,它會先在自身作用域中尋找,如果有就直接使用;如果沒有則向上一級作用域中尋找,直到找到全局作用域;如果全局作用域中依然沒有找到,則會報(bào)錯ReferenceError。
  • 在函數(shù)中要訪問全局變量可以使用window對象。
  • 函數(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會指向不同的對象:

  • 以函數(shù)的形式調(diào)用時,this永遠(yuǎn)都是window;
  • 以方法的形式調(diào)用時,this就是調(diào)用方法的那個對象。
  • 加括號是調(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í)行流程:

  • 立刻創(chuàng)建一個新的對象;
  • 將新建的對象設(shè)置為函數(shù)中this,在構(gòu)造函數(shù)中可以使用this來引用新建的對象;
  • 逐行執(zhí)行函數(shù)中的代碼;
  • 將新建的對象作為返回值返回。
  • 使用同一個構(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的使用情況:

  • 當(dāng)以函數(shù)的形式調(diào)用時,this是window;
  • 當(dāng)以方法的形式調(diào)用時,誰調(diào)用方法 this就是誰;
  • 當(dāng)以構(gòu)造函數(shù)的形式調(diào)用時,this就是新創(chuàng)建的那個對象。
  • 總結(jié)

    以上是生活随笔為你收集整理的JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。