प्रौद्योगिकी साझेदारी

उन्नत जावास्क्रिप्ट प्रोग्रामिंग (चतुर्थ संस्करणम्)--अभिलेख कार्याणि शिक्षितुं (भागः १)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

नियोग

प्रत्येकं फंक्शन् Function प्रकारस्य उदाहरणं भवति, तथा च Function इत्यस्य अपि अन्येषां सन्दर्भप्रकारस्य इव गुणाः, मेथड्स् च सन्ति । फंक्शन्स् ओब्जेक्ट्स् सन्ति, फंक्शन् नाम च फंक्शन् ऑब्जेक्ट् इत्यस्य सूचकं भवति, न तु फंक्शन् इत्यनेन एव दृढतया बद्धं भवति इति अनिवार्यम् ।

फंक्शन परिभाषा का कार्य घोषणात्मक परिभाषा

  1. function sum (n1,n2){
  2. return n1+n2;
  3. }

कार्यपरिभाषायाः कार्यव्यञ्जनम्

  1. let sum = function(n1,n2){
  2. return n1+n2;
  3. };

function definition arrow function

  1. let sum = (n1,n2)=>{
  2. return n1+n2;
  3. };

function definition कन्स्ट्रक्टर्

  1. let sum = new Function("n1","n2","return n1+n2");
  2. /*这个构造函数接收任意多个字符串参数,
  3. 最后一个参数始终会被当成函数体,
  4. 而之前的参数都是新函数的参数*/

बाण कार्य

यत्र कुत्रापि कार्यव्यञ्जनस्य उपयोगः कर्तुं शक्यते तत्र बाणकार्यस्य उपयोगः कर्तुं शक्यते ।

  1. let sum = (a,b)=>{
  2. return a+b;
  3. };
  4. let sum1 = function(a,b){
  5. return a+b;
  6. };
  7. //箭头函数适合嵌入函数的场景
  8. let arr = [1,2,3];
  9. console.log(arr.map(function(i) {return i+1;}));
  10. console.log(arr.map((i)=>{return i+1;}));
  11. //二者结果一样,但是箭头函数更为简洁
  12. //如果只有一个参数,括号可以不用。只有没有参数,或者多个参数的情况下,才使用括号
  13. let double = (x)=>{return 2*x;};
  14. let triple = x => {return 3*x};
  15. //箭头函数也可以不使用大括号,但这样会改变函数的行为。使用大括号就说明包含函数体,可以在一
  16. //个函数中包含多条语句,跟常规函数一样。如果不使用,后面只能有一行代码。
  17. let double = (x)=>{return 2*x;};
  18. let triple = x=>3*x;

यद्यपि बाणकार्यस्य सरलवाक्यविन्यासः भवति तथापि बहवः परिस्थितयः सन्ति यत्र ते अयोग्याः सन्ति । बाणकार्याणि आर्गुमेण्ट्, super, new.target इत्येतयोः उपयोगं कर्तुं न शक्नुवन्ति, न च तेषां उपयोगः कन्स्ट्रक्टर् इत्यस्य रूपेण कर्तुं शक्यते । तदतिरिक्तं बाणकार्यस्य आद्यविशेषणं नास्ति ।

बाणकार्येषु पैरामीटर्

फंक्शन् बाणवाक्यविन्यासस्य उपयोगेन परिभाषितं भवति, अतः फंक्शन् प्रति प्रदत्ताः पैरामीटर्स् arguments कीवर्ड इत्यस्य उपयोगेन अभिगन्तुं न शक्यन्ते, परन्तु केवलं परिभाषितनामक पैरामीटर्स् इत्यस्य माध्यमेन एव अभिगन्तुं शक्यन्ते

  1. function foo() {
  2. console.log(arguments[0]);
  3. }
  4. foo(5); // 5
  5. let bar = () => {
  6. console.log(arguments[0]);
  7. };
  8. bar(5); // ReferenceError: arguments is not defined

कार्यनाम

एकस्य फंक्शन् इत्यस्य बहुनामानि भवितुम् अर्हन्ति ।

  1. function sum(num1, num2) {
  2. return num1 + num2;
  3. }
  4. console.log(sum(10, 10)); // 20
  5. let anotherSum = sum;
  6. console.log(anotherSum(10, 10)); // 20
  7. sum = null;
  8. console.log(anotherSum(10, 10)); // 20

पूर्वनिर्धारित पैरामीटर मूल्य

फंक्शन् परिभाषायां पैरामीटर् इत्यस्य अनन्तरं = इत्यस्य उपयोगेन भवान् पैरामीटर् इत्यस्य कृते पूर्वनिर्धारितं मूल्यं नियुक्तुं शक्नोति ।

  1. function makeKing(name = 'Henry') {
  2. return `King ${name} VIII`;
  3. }
  4. console.log(makeKing('Louis')); // 'King Louis VIII'
  5. console.log(makeKing()); // 'King Henry VIII'

पूर्वनिर्धारितपैरामीटर् मूल्यानि आदिममूल्यानि अथवा वस्तुप्रकारेषु सीमिताः न सन्ति, आह्वानकार्यद्वारा प्रत्यागतानि मूल्यानि अपि उपयोक्तुं शक्यन्ते

  1. let romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI'];
  2. let ordinality = 0;
  3. function getNumerals() {
  4. // 每次调用后递增
  5. return romanNumerals[ordinality++];
  6. }
  7. function makeKing(name = 'Henry', numerals = getNumerals()) {
  8. return `King ${name} ${numerals}`;
  9. }
  10. console.log(makeKing()); // 'King Henry I'
  11. console.log(makeKing('Louis', 'XVI')); // 'King Louis XVI'
  12. console.log(makeKing()); // 'King Henry II'
  13. console.log(makeKing()); // 'King Henry III'

पैरामीटर विस्तार एवं संग्रह

ES6 एकं नूतनं विस्तारसञ्चालकं योजयति, यस्य उपयोगेन संग्रहदत्तांशस्य संचालनाय, संयोजनाय च अतीव संक्षिप्तरूपेण कर्तुं शक्यते । स्प्रेड् ऑपरेटर् कृते सर्वाधिकं उपयोगी परिदृश्यं फंक्शन् परिभाषायां पैरामीटर् सूची अस्ति, यत्र भाषायाः दुर्बल टङ्कनस्य तथा च चरदीर्घता पैरामीटर् इत्यस्य पूर्णं लाभं ग्रहीतुं शक्नोति स्प्रेड् ऑपरेटर् इत्यस्य उपयोगः फंक्शन् आह्वयति समये पैरामीटर्स् पारयितुं, अथवा फंक्शन् पैरामीटर्स् परिभाषितुं कर्तुं शक्यते ।

विस्तारिताः मापदण्डाः

  1. let values = [1, 2, 3, 4];
  2. function getSum() {
  3. let sum = 0;
  4. for (let i = 0; i < arguments.length; ++i) {
  5. sum += arguments[i];
  6. }
  7. return sum;
  8. }
  9. //不使用扩展操作符实现累加
  10. console.log(getSum.apply(null,values));
  11. //使用扩展操作符
  12. console.log(getSum(...values));

पैरामीटर् संग्रहयन्तु

यदि संगृहीतमापदण्डानां पुरतः नामकृताः मापदण्डाः सन्ति तर्हि केवलं शेषमापदण्डाः एव संगृहीताः भविष्यन्ति यदि न तर्हि रिक्तं सरणीं प्राप्स्यति; यतः पैरामीटर्-सङ्ग्रहस्य परिणामः परिवर्तनशीलः भवति, अतः केवलं अन्तिम-पैरामीटर्-रूपेण एव उपयोक्तुं शक्यते ।

  1. function getProduct(...values,lastValue){}//不可以
  2. function ignoreFirst(firstValue,...values){console.log(values)}//可以
  3. ignoreFirst(); // []
  4. ignoreFirst(1); // []
  5. ignoreFirst(1,2); // [2]
  6. ignoreFirst(1,2,3); // [2, 3]

कार्यघोषणा तथा कार्यव्यञ्जना

कस्यापि कोडस्य निष्पादनात् पूर्वं जावास्क्रिप्ट् इञ्जिन् फंक्शन् घोषणां पठति तथा च निष्पादनसन्दर्भे फंक्शन् परिभाषां जनयति । फंक्शन् अभिव्यक्तिः तावत् प्रतीक्षितुम् अर्हति यावत् कोडः स्वपङ्क्तौ निष्पादितः न भवति ततः पूर्वं निष्पादनसन्दर्भे फंक्शन् परिभाषा उत्पन्ना भवति ।
  1. // 没问题
  2. console.log(sum(10, 10));
  3. function sum(num1, num2) {
  4. return num1 + num2;
  5. }
  6. /*函数声明提升*/
  7. // 会出错
  8. console.log(sum(10, 10));
  9. let sum = function(num1, num2) {
  10. return num1 + num2;
  11. };