第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

請(qǐng)問JS函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別是什么

請(qǐng)問JS函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別是什么

慕桂英3389331 2019-07-14 12:08:01
請(qǐng)問JS函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別是什么
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

函數(shù)聲明

1

2

fun();

function fun(){}

這樣定義一個(gè)函數(shù)的時(shí)候,解析器會(huì)將fun提前,所以,fun即使放在函數(shù)聲明之前,也是可以正常運(yùn)行的。

函數(shù)表達(dá)式

1

2

fun();

var fun = function(){}

這種解析器會(huì)先定義一個(gè)fun,也就是

1

2

3

var fun;

fun();

fun = function(){};

所以這樣會(huì)出現(xiàn)錯(cuò)誤。

 


查看完整回答
反對(duì) 回復(fù) 2019-07-15
?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//A:函數(shù)聲明

sum(1,2);// 結(jié)果是:3

console.log(sum);//輸出 result: function sum(a,b){ return a+b; }

//這里打印出來(lái)的是下面聲明的函數(shù)

function sum(a,b){

    return a+b;

}(1,2);//函數(shù)表達(dá)式被前置處理,留下表達(dá)式 (1,2) 單獨(dú)運(yùn)算  result:2

 

----------------------------------------------------------------

 

//B:函數(shù)表達(dá)式

sum(1,2);//報(bào)錯(cuò)  type error:sum is not a function  ①

console.log(sum);//輸出 result: undefined  

var sum=function(a,b){

    return a+b;

}(1,2);//可以立即調(diào)用  result:3

 

// 總結(jié): 主要區(qū)別,函數(shù)聲明,會(huì)被前置,可以理解為優(yōu)先運(yùn)算

//         函數(shù)表達(dá)式可以立即調(diào)用

 

// 補(bǔ)充:

//   ①:變量聲明,也會(huì)被前置,所以 B示例中 sum 的值是 undefined  

//       而不是報(bào) sum is not defined


查看完整回答
反對(duì) 回復(fù) 2019-07-15
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

上述兩種方式除了定義的語(yǔ)法不同之外,最主要的區(qū)別是函數(shù)聲明具有【函數(shù)聲明提升】的特點(diǎn),將函數(shù)聲明提升到作用域頂端,意思是在執(zhí)行代碼之前會(huì)先讀取函數(shù)聲明,也就是說(shuō)可以把函數(shù)聲明放在函數(shù)調(diào)用的后面。

例子1:

1

2

3

4

5

test();//彈出hello,因?yàn)椤竞瘮?shù)聲明提升】的特點(diǎn),函數(shù)調(diào)用之前,已經(jīng)讀取了該函數(shù)完成了聲明

 

            function test(){

                alert("hello");

            }

例子2:

1

2

3

4

5

6

7

8

9

 test();//報(bào)錯(cuò):Uncaught ReferenceError: test is not defined

 

            //因?yàn)椤竞瘮?shù)表達(dá)式】不具備提升的特點(diǎn),在函數(shù)調(diào)用時(shí),作用域中還未讀取該函數(shù)的定義

            //作用域讀取函數(shù)表達(dá)式是按照代碼順序讀取

            var test = function(){

                alert("hello");

            }

 

            test();//彈出hello

例子3:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

            if(condition){

                function test(){

                    alert("hello");

                }

            }else{

                function test(){

                    alert("world");

                }

            }

 

            //彈出world,因?yàn)楹瘮?shù)聲明在代碼執(zhí)行前就已經(jīng)完成了,作用域已經(jīng)完成了對(duì)該函數(shù)的讀取,與條件無(wú)關(guān)

            //同名函數(shù)聲明,后面的會(huì)覆蓋前面的

            test();

 

            if(condition){

                var test2 = function(){

                    alert("hello");

                }

            }else{

                var test2 = function(){

                    alert("world");

                }

            }

            //彈出內(nèi)容與條件相關(guān),作用域讀取函數(shù)表達(dá)式是按照代碼執(zhí)行順序讀取的

            test2();

例子4:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 //函數(shù)表達(dá)式

            var  test = function(){

                alert("hello");

            }

            //第一次調(diào)用

            test();

 

            //變量聲明

            var s = "world";

 

            //函數(shù)聲明

            function test(){

                alert(s);

            }

            //第二次調(diào)用

            test();

 

        //解釋:兩次調(diào)用都將彈出hello,在代碼執(zhí)行前方式二已經(jīng)被作用域讀取,然后執(zhí)行方式一代碼,方式一的test覆蓋方式二的test,然后執(zhí)行兩次調(diào)用彈出hello



查看完整回答
反對(duì) 回復(fù) 2019-07-15
  • 3 回答
  • 0 關(guān)注
  • 702 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)