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 亚洲午夜免费,亚洲欧美日韩中字综合,高颜值美女啪啪

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          JavaScript 函數(shù)調(diào)用

          JavaScript 函數(shù)有 4 種調(diào)用方式。

          每種方式的不同方式在于 this 的初始化。

          this 關(guān)鍵字

          一般而言,在Javascript中,this指向函數(shù)執(zhí)行時的當(dāng)前對象。

          注意 this 是保留關(guān)鍵字,你不能修改 this 的值。

          調(diào)用 JavaScript 函數(shù)

          我們知道如何創(chuàng)建函數(shù)。

          函數(shù)中的代碼在函數(shù)被調(diào)用后執(zhí)行。

          作為一個函數(shù)調(diào)用

          實例

          function myFunction(a, b) {

          return a * b;

          }

          myFunction(10, 2); // myFunction(10, 2) 返回 20

          以上函數(shù)不屬于任何對象。但是在 JavaScript 中它始終是默認(rèn)的全局對象。

          在 HTML 中默認(rèn)的全局對象是 HTML 頁面本身,所以函數(shù)是屬于 HTML 頁面。

          在瀏覽器中的頁面對象是瀏覽器窗口(window 對象)。以上函數(shù)會自動變?yōu)?window 對象的函數(shù)。

          myFunction() 和 window.myFunction() 是一樣的:

          實例

          function myFunction(a, b) {

          return a * b;

          }

          window.myFunction(10, 2); // window.myFunction(10, 2) 返回 20

          這是調(diào)用 JavaScript 函數(shù)常用的方法, 但不是良好的編程習(xí)慣 全局變量,方法或函數(shù)容易造成命名沖突的bug。

          全局對象

          當(dāng)函數(shù)沒有被自身的對象調(diào)用時, this 的值就會變成全局對象。

          在 web 瀏覽器中全局對象是瀏覽器窗口(window 對象)。

          該實例返回 this 的值是 window 對象:

          實例

          function myFunction() {

          return this;

          }

          myFunction(); // 返回 window 對象

          函數(shù)作為全局對象調(diào)用,會使 this 的值成為全局對象。使用 window 對象作為一個變量容易造成程序崩潰。

          函數(shù)作為方法調(diào)用

          在 JavaScript 中你可以將函數(shù)定義為對象的方法。

          以下實例創(chuàng)建了一個對象 (myObject), 對象有兩個屬性 (firstNamelastName), 及一個方法 (fullName):

          實例

          var myObject = {

          firstName:"John",

          lastName: "Doe",

          fullName: function () {

          return this.firstName + " " + this.lastName;

          }

          }

          myObject.fullName(); // 返回 "John Doe"

          fullName 方法是一個函數(shù)。函數(shù)屬于對象。 myObject 是函數(shù)的所有者。

          this對象,擁有 JavaScript 代碼。實例中 this 的值為 myObject 對象。

          測試以下!修改 fullName 方法并返回 this 值:

          實例

          var myObject = {

          firstName:"John",

          lastName: "Doe",

          fullName: function () {

          return this;

          }

          }

          myObject.fullName(); // 返回 [object Object] (所有者對象)

          函數(shù)作為對象方法調(diào)用,會使得 this 的值成為對象本身。

          使用構(gòu)造函數(shù)調(diào)用函數(shù)

          如果函數(shù)調(diào)用前使用了 new 關(guān)鍵字, 則是調(diào)用了構(gòu)造函數(shù)。

          這看起來就像創(chuàng)建了新的函數(shù),但實際上 JavaScript 函數(shù)是重新創(chuàng)建的對象:

          實例

          // 構(gòu)造函數(shù):

          function myFunction(arg1, arg2) {

          this.firstName = arg1;

          this.lastName = arg2;

          }

          // Thiscreates a new object

          var x = new myFunction("John","Doe");

          x.firstName; // 返回 "John"

          構(gòu)造函數(shù)的調(diào)用會創(chuàng)建一個新的對象。新對象會繼承構(gòu)造函數(shù)的屬性和方法。

          構(gòu)造函數(shù)中 this 關(guān)鍵字沒有任何的值。this 的值在函數(shù)調(diào)用時實例化對象(new object)時創(chuàng)建。

          作為函數(shù)方法調(diào)用函數(shù)

          在 JavaScript 中, 函數(shù)是對象。JavaScript 函數(shù)有它的屬性和方法。

          call()apply() 是預(yù)定義的函數(shù)方法。 兩個方法可用于調(diào)用函數(shù),兩個方法的第一個參數(shù)必須是對象本身。

          實例

          function myFunction(a, b) {

          return a * b;

          }

          myFunction.call(myObject, 10, 2); // 返回 20

          實例

          function myFunction(a, b) {

          return a * b;

          }

          myArray = [10,2];

          myFunction.apply(myObject, myArray); // 返回 20

          兩個方法都使用了對象本身作為第一個參數(shù)。 兩者的區(qū)別在于第二個參數(shù): apply傳入的是一個參數(shù)數(shù)組,也就是將多個參數(shù)組合成為一個數(shù)組傳入,而call則作為call的參數(shù)傳入(從第二個參數(shù)開始)。

          在 JavaScript 嚴(yán)格模式(strict mode)下, 在調(diào)用函數(shù)時第一個參數(shù)會成為 this 的值, 即使該參數(shù)不是一個對象。

          在 JavaScript 非嚴(yán)格模式(non-strict mode)下, 如果第一個參數(shù)的值是 null 或 undefined, 它將使用全局對象替代。

          通過 call() 或 apply() 方法你可以設(shè)置 this 的值, 且作為已存在對象的新方法調(diào)用。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          文實例講述了JavaScript函數(shù)的4種調(diào)用方法。分享給大家供大家參考,具體如下:

          JavaScript 函數(shù)有 4 種調(diào)用方式:

          1. 作為一個函數(shù)調(diào)用
          2. 函數(shù)作為方法調(diào)用
          3. 使用構(gòu)造函數(shù)調(diào)用函數(shù)
          4. 作為函數(shù)方法調(diào)用函數(shù)

          分述如下:

          每種方式的不同方式在于 this 的初始化。

          作為一個函數(shù)調(diào)用

          function myFunction(a, b) {
           return a * b;
          }
          myFunction(10, 2); // myFunction(10, 2) 返回 20
          

          以上函數(shù)不屬于任何對象。但是在 JavaScript 中它始終是默認(rèn)的全局對象。

          在 HTML 中默認(rèn)的全局對象是 HTML 頁面本身,所以函數(shù)是屬于 HTML 頁面。

          在瀏覽器中的頁面對象是瀏覽器窗口(window 對象)。以上函數(shù)會自動變?yōu)?window 對象的函數(shù)。

          myFunction() 和 window.myFunction() 是一樣的:

          function myFunction(a, b) {
           return a * b;
          }
          window.myFunction(10, 2); // window.myFunction(10, 2) 返回 20
          

          當(dāng)函數(shù)沒有被自身的對象調(diào)用時, this 的值就會變成全局對象。

          在 web 瀏覽器中全局對象是瀏覽器窗口(window 對象)。

          該實例返回 this 的值是 window 對象:

          function myFunction() {
           return this;
          }
          myFunction(); // 返回 window 對象
          

          函數(shù)作為全局對象調(diào)用,會使 this 的值成為全局對象。

          使用 window 對象作為一個變量容易造成程序崩潰。

          函數(shù)作為方法調(diào)用

          var myObject = {
           firstName:"John",
           lastName: "Doe",
           fullName: function () {
           return this.firstName + " " + this.lastName;
           }
          }
          myObject.fullName(); // 返回 "John Doe"
          

          fullName 方法是一個函數(shù)。函數(shù)屬于對象。 myObject 是函數(shù)的所有者。

          this對象,擁有 JavaScript 代碼。實例中 this 的值為 myObject 對象。

          測試以下!修改 fullName 方法并返回 this 值:

          var myObject = {
           firstName:"John",
           lastName: "Doe",
           fullName: function () {
           return this;
           }
          }
          myObject.fullName(); // 返回 [object Object] (所有者對象)
          

          函數(shù)作為對象方法調(diào)用,會使得 this 的值成為對象本身。

          使用構(gòu)造函數(shù)調(diào)用函數(shù)

          如果函數(shù)調(diào)用前使用了 new 關(guān)鍵字, 則是調(diào)用了構(gòu)造函數(shù)。

          這看起來就像創(chuàng)建了新的函數(shù),但實際上 JavaScript 函數(shù)是重新創(chuàng)建的對象:

          // 構(gòu)造函數(shù):
          function myFunction(arg1, arg2) {
           this.firstName = arg1;
           this.lastName = arg2;
          }
          // This creates a new object
          var x = new myFunction("John","Doe");
          x.firstName; // 返回 "John"
          

          構(gòu)造函數(shù)的調(diào)用會創(chuàng)建一個新的對象。新對象會繼承構(gòu)造函數(shù)的屬性和方法。

          構(gòu)造函數(shù)中 this 關(guān)鍵字沒有任何的值。

          this 的值在函數(shù)調(diào)用時實例化對象(new object)時創(chuàng)建。

          作為函數(shù)方法調(diào)用函數(shù)

          在 JavaScript 中, 函數(shù)是對象。JavaScript 函數(shù)有它的屬性和方法。

          call() 和 apply() 是預(yù)定義的函數(shù)方法。 兩個方法可用于調(diào)用函數(shù),兩個方法的第一個參數(shù)必須是對象本身。

          function myFunction(a, b) {
           return a * b;
          }
          myObject = myFunction.call(myObject, 10, 2); // 返回 20
          function myFunction(a, b) {
           return a * b;
          }
          myArray = [10, 2];
          myObject = myFunction.apply(myObject, myArray); // 返回 20
          

          兩個方法都使用了對象本身作為第一個參數(shù)。 兩者的區(qū)別在于第二個參數(shù): apply傳入的是一個參數(shù)數(shù)組,也就是將多個參數(shù)組合成為一個數(shù)組傳入,而call則作為call的參數(shù)傳入(從第二個參數(shù)開始)。

          在 JavaScript 嚴(yán)格模式(strict mode)下, 在調(diào)用函數(shù)時第一個參數(shù)會成為 this 的值, 即使該參數(shù)不是一個對象。

          在 JavaScript 非嚴(yán)格模式(non-strict mode)下, 如果第一個參數(shù)的值是 null 或 undefined, 它將使用全局對象替代。

          最后

          以下是總結(jié)出來最全前端框架視頻,包含: javascript/vue/react/angualrde/express/koa/webpack 等學(xué)習(xí)資料。

          【領(lǐng)取方式】

          關(guān)注頭條 前端全棧架構(gòu)丶第一時間獲取最新前端資訊學(xué)習(xí)

          手機用戶可私信關(guān)鍵詞 【前端】即可獲取全棧工程師路線和學(xué)習(xí)資料!

          avaScript是一種發(fā)展迅速的語言。這篇文章,我想展示一些有關(guān)如何在JavaScript中應(yīng)用函數(shù)式編程的示例。

          JavaScript中的函數(shù)式編程

          即使函數(shù)式編程可以極大地改善應(yīng)用程序的代碼,但其原理在開始時可能會有些挑戰(zhàn)。由于詳細(xì)解釋所有這些都將花費大量時間,因此我們決定使用兩個實際的代碼示例來介紹這些概念

          1.Maybe Monad

          在第一個示例中,我們找到一種避免驗證變量是否為Null的方法。假設(shè)在我們的應(yīng)用程序中,我們可以找到具有以下格式的用戶:

          const someUser = {
           name: 'some_name',
           email: 'some@email.com',
           settings: {
            language: 'sp'
           }
          };

          有一個功能,可以以用戶設(shè)置的語言返回歡迎消息。

          const allGreetings = {
           'en': '嗨',
           'sp': '你好',
           'fr': '歡迎你'
          };
          const getGreetingForUser = (user) => {
           //將要執(zhí)行
          }

          來看一個遵循命令式模型的“ getGreetingForUser”函??數(shù)的實現(xiàn):

          const getGreetingForUser = (user) => {
           if (!user) {
             return allGreetings.en;
           }
           if (user.settings && user.settings.language) {
             if (allGreetings[user.settings.language]) {
               return allGreetings[user.settings.language]
             } else {
               return allGreetings.en;
             }
           } else {
             return allGreetings.en;
           }
          };
          console.log(getGreetingForUser(someUser));

          如上面所看到的,必須檢查用戶是否已經(jīng)存在,是否已設(shè)置語言,以及是否已準(zhǔn)備好歡迎消息。如果出現(xiàn)問題,我們將以默認(rèn)語言返回一條消息。

          現(xiàn)在,讓我們看一下相同的函數(shù),但是這次我們將在其實現(xiàn)中使用函數(shù)式編程:

          const getGreetingForUser = (user) => {
            return RamdaFantasy.Maybe(user)
              .map(Ramda.path(['settings', 'language']))
              .chain(maybeGreeting);
          };
          const maybeGreeting = Ramda.curry((greetingsList, userLanguage) => {
            return RamdaFantasy.Maybe(greetingsList[userLanguage]);
          })(allGreetings);
          console.log(getGreetingForUser(someUser).getOrElse(allGreetings.en));

          為了處理可能為null或未定義的情況,我們將使用Maybe Monad。這使我們可以在對象周圍創(chuàng)建包裝器,并為空對象分配默認(rèn)行為。

          讓我們比較兩種解決方案:

          //代替驗證用戶是否為空
          if (!user) {
            return allGreetings.en;
          }
          //我們將用:
          RamdaFantasy.Maybe(user) //我們將用戶添加到包裝器中
          //代替:
           if (user.settings && user.settings.language) {
             if (allGreetings[user.settings.language]) {
          //我們將用:
           <userMaybe>.map(Ramda.path(['settings', 'language'])) //如果存在數(shù)據(jù),映射將會用它
          //不是在else中返回默認(rèn)值:
           return indexURLs['en'];
          .getOrElse(allGreetings。EN)
          // 指定的默認(rèn)值。

          2 Either Monad

          當(dāng)我們知道存在空錯誤時的默認(rèn)行為時,Maybe Monad非常有用。

          但是,如果我們有一個引發(fā)錯誤的函數(shù),或者我們將各種引發(fā)錯誤的函數(shù)鏈接在一起,并且我們想知道哪個發(fā)生了故障,則可以改用Either Monad。

          現(xiàn)在,讓我們假設(shè)我們要計算產(chǎn)品的價格,同時考慮增值稅和可能的折扣。我們已經(jīng)有了以下代碼:

          
          const withTaxes = (tax, price) => {
          2
           if (!_.isNumber(price)) {
          3
           return new Error("Price is not numeric");
          4
           }
          5
           return price + (tax * price);
          6
          };
          7
          const withDiscount = (dis, price) => { 
          8
            if (!_.isNumber(price)) { 
          9
              return new Error("Price is not numeric"); 
          10
            } 
          11
            if (price < 5) 
          12
              return new Error("Discounts not available for low-priced items"); 
          13
            } 
          14
            return price - (price * dis);5
          }; 
          const isError = (e) => e && e.name === 'Error';
          const calculatePrice(price, tax, discount) => { 
          //將要執(zhí)行
          }

          讓我們來看一個遵循命令式模型的“ calculatePrice”函數(shù)的實現(xiàn):

          const calculatePrice = (price, tax, discount) => {
            const priceWithTaxes = withTaxes(tax, price);
            if (isError(priceWithTaxes)) {
              return console.log('Error: ' + priceWithTaxes.message);
            }
            const priceWithTaxesAndDiscount = withDiscount(discount, priceWithTaxes);
            if (isError(priceWithTaxesAndDiscount)) {
              return console.log('Error: ' + priceWithTaxesAndDiscount.message);
            }
            console.log('Total Price: ' + priceWithTaxesAndDiscount);
          }
          //我們計算出價值25的產(chǎn)品(含21%的增值稅和10%的折扣)的最終價格。
           calculatePrice(25, 0.21, 0.10)

          現(xiàn)在,讓我們了解如何使用Either Monad重寫此函數(shù)。

          都有兩個構(gòu)造函數(shù),Left和Right。我們要實現(xiàn)的是將異常存儲到Left構(gòu)造函數(shù),并將正常結(jié)果(快樂路徑)存儲到Right構(gòu)造函數(shù)。

          首先,將更改已經(jīng)存在的withTaxes和withDiscount函數(shù),以便在出現(xiàn)錯誤時它們返回Left,在一切正常的情況下返回Right:

          const withTaxes = Ramda.curry((tax, price) => {
            if (!_.isNumber(price)) {
              return RamdaFantasy.Either.Left(new Error("Price is not numeric"));
            }
            return RamdaFantasy.Either.Right(price + (tax * price)); 
          });
          const withDiscount = Ramda.curry((dis, price) => {
            if (!_.isNumber(price)) {
              return RamdaFantasy.Either.Left(new Error("Price is not numeric")); 
            }
            if (price < 5) { 
              return RamdaFantasy.Either.Left(new Error("Discounts not available for low-priced items")); 
            } 
            return RamdaFantasy.Either.Right(price - (price * dis)); 
          });


          然后,我們?yōu)镽ight案例創(chuàng)建一個函數(shù)(顯示價格),為Left案例創(chuàng)建另一個函數(shù)(顯示錯誤),然后使用它們創(chuàng)建Either Monad:

          const showPrice = (total) => { console.log('Price: ' + total) }; 
          const showError = (error) => { console.log('Error: ' + error.message); }; 
          const eitherErrorOrPrice = RamdaFantasy.Either.either(showError, showPrice);

          最后,只需要執(zhí)行Monad來計算最終價格:

          //計算出價值25的產(chǎn)品(含21%的增值稅和10%的折扣)的最終價格。
           eitherErrorOrPrice(
             RamdaFantasy.Either.Right(25)
               .chain(withTaxes(0.21))
               .chain(withDiscount(0.1))
          )

          結(jié)論:JavaScript中的函數(shù)式編程

          正如我們所看到的,一旦用Maybe和Either單子分解了代碼,就沒有那么復(fù)雜了。如果使用得當(dāng),它們可以使我們的代碼更易于閱讀和維護(hù)。

          唯一的不便是我們需要克服的初始障礙,但這可以通過在網(wǎng)上一些示例并進(jìn)行一些測試來完成。

          喜歡可以關(guān)注一下哦。

          半夜的一次斜眸,我發(fā)現(xiàn)了支付寶灰色產(chǎn)業(yè)的一角

          得知開源會削弱對中國的技術(shù)封鎖,特朗普氣炸了

          用漫畫讓你清楚了解linux內(nèi)核,看懂了么?

          你用大量 if else,而不用switch的原因,if真香啊

          能在996公司久呆的人,到底有多會劃水?


          主站蜘蛛池模板: 精品一区二区三区电影| 冲田杏梨AV一区二区三区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产一区在线视频| 在线电影一区二区三区| 国产精品制服丝袜一区| 国产一区二区内射最近更新| 国产一区二区视频在线播放| 亚洲国产视频一区| 麻豆AV天堂一区二区香蕉| 国产精品视频一区二区三区| 精品国产aⅴ无码一区二区| 亚洲区精品久久一区二区三区| 久久综合亚洲色一区二区三区| 精品无码一区在线观看| 国产精品久久久久一区二区三区 | 在线免费视频一区二区| 免费看AV毛片一区二区三区| 男人的天堂亚洲一区二区三区| 无码AV一区二区三区无码| 一区二区三区国产| 无码一区二区波多野结衣播放搜索| 波多野结衣AV一区二区三区中文| 日韩一区二区三区视频久久| 国产一区二区三区在线2021 | 久久se精品一区精品二区国产| 日本成人一区二区三区| 日本精品一区二区三本中文 | 国偷自产视频一区二区久| 一区二区三区中文字幕| 精品人妻中文av一区二区三区| 无码一区二区三区亚洲人妻| 中文字幕在线观看一区二区| 国产91久久精品一区二区| 精品一区二区三区四区在线| 糖心vlog精品一区二区三区| 中文字幕一区视频一线| 韩国精品一区二区三区无码视频| 日本免费电影一区二区| 精品视频在线观看你懂的一区 | 久久久国产精品一区二区18禁 |