Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91精品在线免费观看,免费观看日本,亚洲精品亚洲九十七页

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          什么是JavaScript函數基礎知識(全),讓你徹

          什么是JavaScript函數基礎知識(全),讓你徹底搞懂函數

          果您已經開始學習JavaScript了,那是時候了解下基本函數了,本章節為大家分享JavaScript基本函數!

          什么是函數?

          一般來說,函數是經過精心挑選和設計以執行特定任務的子程序

          它是一個對象。要執行一個函數,您將調用它,也稱為調用函數。您還可以將值傳遞給函數以在函數中使用。事實上,函數總是會返回一個值。因此,如果您不指定返回值, JavaScript 函數將返回 undefined

          什么是 JavaScript 函數?

          您可以通過多種方式在代碼中定義 JavaScript函數。首先,您將使用函數聲明。您可以使用關鍵字function創建函數聲明,然后添加函數的名稱。當您使用函數聲明時,您將提升函數定義,這將允許您在定義函數之前使用它。

          接下來,您有一個任務 JavaScript 函數表達式。這定義了一個匿名或命名的名字 JavaScript 函數。匿名函數是尚未命名的函數。因為函數表達式不能被提升,所以在定義它們之前不能使用它們。

          創建函數表達式的較短語法是箭頭函數。這種類型的 JavaScript 函數不會創建自己的值。它僅用于編寫不同的功能。

          參數(arguments)和參數(parameters)

          您可能聽說過“arguments”和“parameters”這兩個術語可以互換使用,這可能會導致您認為它們是同一個東西。雖然這兩個術語在涉及 JavaScript 函數時非常相似,但您應該了解一些非常重要的區別。

          參數用于定義JavaScript 函數。這意味著參數是在定義 JavaScript 函數是最初創建的名稱。在進行函數定義時,您可能會傳遞多達 255 個 JavaScript 參數。使用逗號將參數與下一個參數隔開。

          如何調用函數

          當您調用JavaScript 函數時,您正在執行該函數,也稱為調用它。要調用函數,首先添加JavaScript 函數的名稱,后跟兩個括號。為了幫助您更好地理解 JavaScript的這個組件。

          如果您當前使用的是Google Chrome,請打開開發者控制臺。這將允許您練習 JavaScript 函數。要打開此開發人員控制臺,請按 Ctrl + Shift + J(對于 Windows)Cmd + Opt + J(對于 Mac)

          首先,讓我們定義一個名為 logIt的 JavaScript 函數。這個 JavaScript 函數將有一個參數:“city”。執行完此函數后,我們將名稱記錄到控制臺中。它看起來像這樣:

          如果你想調用這個函數,你可以調用它并將它傳遞給一個參數。在此示例中,JavaScript 函數名為 Dallas。它看起來像這樣:

          如果您的函數沒有任何參數,則可以使用一組空括號來調用它。它看起來像這樣;

          什么是 JavaScript 函數返回?

          在 JavaScript 中,除非您另行指定,否則每個函數都將返回undefined。讓我們通過調用一個空的JavaScript 函數

          在上面的示例中,JavaScript 函數將返回 undefined。要自定義它將返回什么,我們可以使用關鍵字“return”,然后是我們希望它返回的值。

          在上面的示例中,我們已經告訴 JavaScript 函數我們希望它返回false。調用此函數允許這種情況發生。這很重要,因為函數返回的值將返回給函數的調用者。

          表達式將創建一個 JavaScript 函數,該函數將給出的一個值是什么 num 參數的兩倍的值。然后,您可以調用此 JavaScript 函數并未將返回的值保存到變量中:

          注銷此測試值會返回結果為 9。關于 return 語句的另一個重要規則是它會立即停止函數。

          JavaScript 函數對象

          函數本質上是一個函數對象。這是一個事實,即如果某些東西不是原始的,那么它就是一個對象。JavaScript對象用途廣泛;它甚至可以讓我們將 JavaScript 中的函數作為參數移動到另一個 JavaScript 函數。

          當一個 JavaScript 函數接受另一個參數函數時,這是一個高階函數。無論您目前是否參加了會議 JavaScript 訓練營,您很可能已經在 JavaScript 使用過一個高階函數,但并沒有意識到這一點。這方面的兩個例子是Array.prototype.filterArray.prototype.mapand。這些只是眾多高階函數中的一小部分。

          總結:總而言之,JavaScript 函數是一個對象。它是子程序的一部分,其目標是完成一種特定類型的任務。一個 JavaScript 函數被提升,而一個表達式沒有。要執行 JavaScript 函數,您將調用它,這稱為調用函數。您也可以將值傳遞給函數,以便在函數中使用它,也稱為參數,而其本身的值是參數。一個函數總是會返回一個值,但是 JavaScript 中沒有返回值的函數會以未定義的形式返回。

          文共2416字,預計學習時長5分鐘

          圖片來源:Unsplash/Luca Bravo

          函數是編程中的關鍵部件之一。這些函數可執行特定任務,并可反復調用執行。將Javascript中的函數和其他編程語言中的函數相比較,其中最大的區別在于Javascript函數為一級對象,這意味著Javascript中的函數表現類似于對象,可作為變量、數組和其他對象。


          本文就定義函數的三種不同方法進行討論:

          1. 函數聲明

          2. 函數表達式

          3. 生成器函數


          1. 函數聲明


          函數聲明可能是最常見的方式了。觀察如下語句:

          function name (parameter)
          {
           statements 
          }
          


          函數聲明語句

          函數由關鍵字函數、函數的強制名稱和括號內的參數組成(定義函數也可無參數)。最后,大括號內則是函數的主體,用以執行實際任務。


          理解形參和實參的區別很重要。形參是定義函數時的一個變量。在調用函數時,實參則是輸入函數形參的實際數據。


          首先,看一個簡單實例:

          function hello(name)
          {
          console.log("Hello "+ name)
          }
          hello('stuti')
          // Hello stuti
          hello(12)
          // Hello 12
          


          名為hello的函數以實際參數名稱聲明,在控制臺記錄消息。從本例中,可以看出,因為實際參數上無指定類型,所以其既適用于string函數,也適用于number函數。倘若只是希望該函數是一個名稱而不是數值呢?很遺憾,由于Javascript中沒有預建法來實現這一點,必須手動確定輸入函數的實際參數類型,如下所示:


          function hello(name) {
           if (typeof name==='string')
           console.log("Hello " + name)
           else
           console.log("Please input a Name")
          }
          hello(12) 
          // Plese input a Name
          


          默認情況下,函數返回未定義變量。若要返回任何其他值,則函數必須具備返回語句,而由該語句指定返回值。


          function something(){
          }
          console.log(something()) // undefined
          function notSomething(){
           return 1
          }
          console.log(notSomething()) // 1
          


          函數聲明中提升是什么?


          簡單地說,這意味著在執行代碼時,無論何處聲明函數或變量,它們均會移動至作用域的頂部。這也就是所謂的提升。


          觀察下方實例:

          myName()
          // My name is Stuti Chahuhan
          function myName() {
           console.log(`My name is Stuti Chauhan`)
          }
          


          函數聲明中的提升

          此處甚至是在聲明之前就調用了這個函數——提升。



          2. 函數表達式

          圖片來源:unsplash.com/@creativegangsters

          函數表達式與函數聲明極為相似,連語句都不甚相同。最主要的區別在于函數表達式不以關鍵字函數開頭,且函數名稱可選,在此情況下,該函數表達式則可以成為一個匿名函數。如果函數有名稱,則將其稱為命名函數表達式。

          let checkNumber=function check (num){
           return (num %2==0)?"even" : "odd"
           }
          console.log(checkNumber(50)) 
          // even
          


          函數表達式的例子

          現在來觀察一下定義上述函數的匿名法。

          //Anonymous Function 
          let checkNumber=function (num){
           return (num %2==0)?"even" : "odd"
           }
          console.log(checkNumber(50)) 
          // even
          


          匿名函數表達式

          函數聲明和函數表達式最關鍵的區別就在于函數表達式無提升功能。若在函數表達式中嘗試與提升函數聲明相同的項目,則會出現報錯。

          myName()
          // ReferenceError: myName is not defined
          let myName=function () {
           console.log(`My name is Stuti Chauhan`)
          }
          


          函數表達式中無提升

          IIFE(立即執行函數表達式)


          這意味著函數一旦定義就開始運行,而函數表達式附在分組操作符()中,

          ( function () {
           let num=4
           return num
           })
          //4
          


          為什么典型的函數表達式需要IIFE?一般定義一個函數,隨后多次調用。但倘若只想調用一次用來生成輸出,并且不再使用該函數呢?由此就出現了IIFE。該函數會立即執行,并在以后不再經程序訪問。因為不需再調用該函數,所以它也不需要名稱,因此匿名函數表達式首選IIFE。

          3. 生成器函數

          圖片來源:unsplash.com/@roman_lazygeek

          普通函數遵循運行-完成的模型,不能在執行最后一行之前停止運行。若想在執行過程中退出,必須返回或拋出一個錯誤。


          而生成器函數可以在執行過程中停止。當其調回時,仍然從停止的地方繼續。


          該函數與普通函數一樣進行聲明,但不同之處在于生成器函數在function關鍵字后面帶有星號*,其間可包含任意數量的空格。


          還有一點需要注意:在JavaScript中,生成器是一個函數,該函數返回一個對象,在該對象上可調用next(),每次調用next()都會返回一個結構如下的對象:

          { 
           value: Any,
           done: true|false
          } 
          


          此對象包含兩個屬性:value和done。Value是對象的實際值,而done規定了函數終止的屬性——默認值為false,當其變為true時,則函數停止。


          通過一個簡單的例子來理解這點:

          function * generatorFunction()
          { 
           console.log('first to execute');
           yield 'takes a pause'; 
           
           console.log(' printed after the pause'); 
           yield 'end of the function';
           
          }
          const gen=generatorFunction();
          console.log(gen.next().value); // first to execute
           // takes a pause
          console.log(gen.next().value); // printed after the pause
           // end of the function
          console.log(gen.next().value); 
           // undefined
          


          函數本體中,不使用return關鍵字——而是使用yeild,如果使用了return,則會將done屬性更改為true,函數將結束——之后的任何操作都不會執行。Yield給出為其分配的值。


          首先,在調用函數前先定義函數,同時調用一個生成器函數,形成一個生成器對象,存儲在變量中。


          然后在使用next()和value屬性時調用對象。第一次使用next()時,函數執行開始。首先,運行console.log (“首次執行”)并將其記錄在控制臺中,然后遇到yield—輸出 “暫停”值,執行停止。


          第二次調用next()時,它從上次暫停處繼續。同樣,首先運行console.log(),再次遇到yield,生成“函數結束”值,函數停止。


          第三次調用next()時,結果是未定義。這是因為由生成器函數生成的對象只能迭代一次——該對象現在是無用的,必須生成一個新對象才能重新啟動程序。

          function* generator() {
           yield "some value";
           return "ends here";
           yield "will never execute";
           yield "never reach here"
          }
          var gen=generator()
          console.log(gen.next()); 
          // { value: "some value", done: false }
          console.log(gen.next()); 
          // { value: "ends here", done: true }
          console.log(gen.next()); 
          // { value: undefined, done: true }
          console.log(gen.next()); 
          // { value: undefined, done: true }
          


          如果使用return而不是yield,那么數據的值就會被更改為true,之后就不會執行任何操作。與Promise結合使用時,就異步編程而言,生成器是一個非常強大的工具。該函數即使不能完全消除回調的問題,也可以減輕其問題的程度。


          結論:哪種方法更好?


          事實上,我們不能將其進行比較,然后說一個比另一個好——聲明的類型還是取決于具體情況或條件。


          為實現更好的異步功能則使用生成器函數,針對立即執行函數的情況,則使用匿名函數表達式。

          留言 點贊 關注

          我們一起分享AI學習與發展的干貨

          編譯組:柳玥、溫媛

          相關鏈接:

          https://medium.com/better-programming/three-ways-to-define-functions-in-javascript-750a908e51d9

          如需轉載,請后臺留言,遵守轉載規范

          數-function是Javascript非常重要的概念。


          在寫程序的時候,你會發現在程序的不同地方會書寫相同的代碼,這個時候就需要引入函數。


          譬如求一個數字是不是素數,素數的定義如下:

          素數是指一個數只能被1和本身整除。


          我們就可以用前面的for和if語句來寫一個函數。


          函數的語法是這樣:

          • function name(parameters)

            {

            ...body...

            }


            name是函數的名字。

            parameters是函數。

            body表示函數里面的代碼。


            那么求一個數是不是素數的函數如下:

            function isPrimer(a){

            for(var i=1;i<a;i++) {

            if(a%i==0) //如果可以整除

            {

            return false; //return也是一個語法,表示函數額返回值

            }

            }

            return true;

            }


            定義完函數以后,我們就可以使用它(這段代碼我們稱為代碼1):

            function isPrimer(a){

            for(var i=1;i<a;i++) {

            if(a%i==0) //如果可以整除

            {

            return false; //return也是一個語法,表示函數額返回值

            }

            }

            return true;

            }

            var a1=100
            if(isPrimer(a1))

            {

            console.log("這個數是素數:"+a1);

            }else{

            console.log("這個數不是素數:"+a1);

            }
            var b1=13
            if(isPrimer(b1))

            {

            console.log("這個數是素數:"+b1);

            }else{

            console.log("這個數不是素數:"+b1);

            }

            基于上面的代碼,看到還是有些代碼是重復,我們就可以再提取一個函數,這里名字叫PrintPrimer:

            function PrintPrimer(a){

            if(isPrimer(a)) {

            console.log("這個數是素數:"+a);

            } else {

            console.log("這個數不是素數:"+a);

            }

            }

            最后我們代碼綜合在一起,就變成了這樣:


            • var a1=100;

              var b1=13;


              PrintPrimer(a1)

              PrintPrimer(b1)


              最后是綜合例子2:

              function isPrimer(a){

              for(var i=1;i<a;i++) {

              if(a%i==0) //如果可以整除

              {

              return false; //return也是一個語法,表示函數額返回值

              }

              }

              return true;

              }

              function PrintPrimer(a){

              if(isPrimer(a)) {

              console.log("這個數是素數:"+a);

              } else {

              console.log("這個數不是素數:"+a);

              }

              }

              var a1=100;

              var b1=13;


              PrintPrimer(a1);

              PrintPrimer(b1);



              我們看到PrintPrimer函數可以在內部調用isPrimer函數,而且更近一步,還可以調用自身,稱為“遞歸”。


              平日下面一個數字列表:

              1 1 2 3 5 8 。。。。


              這個數字列表的特別就是,第一和第二項為1,然后后面的數字是前面兩個數字的和。


              用Javascript怎么寫這個功能呢?(代碼4)


              • function fab(a){

                if(a==1 || a==0) //調用自身的截止條件,如果不設置,容易出現問題。

                return 1;

                else {

                return fab(a-1)+fab(a-2); //調用自身

                }

                }
                var fab_5=fab(5)console.log("fab(5)="+fab_5)


                好了,關于JavaScript的函數今天就到這里,請大家仔細體會。


          主站蜘蛛池模板: 国产一区二区不卡老阿姨| 少妇无码一区二区二三区| 国产日韩精品一区二区三区在线 | AA区一区二区三无码精片| 亚洲一区二区三区免费观看| 亚洲愉拍一区二区三区| 国产精品福利一区| 中文乱码精品一区二区三区| 国产AV一区二区三区无码野战| 亚洲一区二区三区免费观看 | 国产成人精品一区二三区在线观看| 亚洲性日韩精品国产一区二区| 久久99热狠狠色精品一区| 国产精品高清一区二区三区不卡| 在线成人综合色一区| 国产在线不卡一区二区三区 | 一区在线观看视频| 久久精品无码一区二区三区| 中文无码一区二区不卡αv| 一区二区三区AV高清免费波多| 亚洲日本一区二区三区| 国产精品熟女视频一区二区| 亚洲一区二区三区在线观看精品中文| 美女视频一区三区网站在线观看| 成人国产精品一区二区网站| 无码欧精品亚洲日韩一区| 国产成人久久一区二区三区| 福利一区二区三区视频在线观看 | 国产熟女一区二区三区四区五区 | 久久无码人妻一区二区三区午夜 | 久久精品视频一区| 国产成人高清亚洲一区91| 亚洲视频在线观看一区| 亚洲美女高清一区二区三区| 99精品一区二区三区无码吞精| 免费看一区二区三区四区| 国模精品一区二区三区视频| 无码精品视频一区二区三区| 一区二区三区福利视频| 久久精品日韩一区国产二区| 消息称老熟妇乱视频一区二区|