为了转生而点技能-JavaScript,day10(匿名函式、具名函式、立即函式

函式解构:

functionName:为函式命名,当函式型态为函式陈述式,则必须命名。
函式里面宣告的变数:为区域变数,仅对函式内部有效。
参数:函式可依照输入的参数不同,产生不同的结果。
有关函式表达式及函式陈述式可参考此篇

     function functionName(parameter) {
       var localVariable = '区域变数';
       console.log(this, localVariable); // This、区域变数

       return '附加一段' + parameter; // 回传、参数
     }

     var data = functionName('参数');// 呼叫函式
     console.log(data);
        var functionC = function functionName() {
            console.log(functionC);
            console.log(functionName);
        }
        functionC();   

        console.log(functionC);
        
        console.log(functionName);

解functionC():

  1. 执行console.log(functionC)的结果:如下
     console.log(functionC);
     console.log(functionName);}
  1. 执行console.log(functionName)的结果:如下
      console.log(functionC);
      console.log(functionName);

解console.log(functionC):

      console.log(functionC);
      console.log(functionName);

解console.log(functionName):

出现错误讯息:functionName is not defined,因为函式表达式的函式名称只供该表达式调用,无法给其他函式使用。

函式名称调用例子:

        var num = 1;
        var giveMeMoney = function giveMoreMoney(coin) {
            num += 1;
            console.log('执行 giveMeMoney', num, coin);
            return coin > 100 ? coin : giveMoreMoney(num * coin);
        };

        console.log(giveMeMoney(30));

结果:
https://ithelp.ithome.com.tw/upload/images/20211202/20143762h3SfZ0Zr3N.jpg



立即函式:IIFE (Immediately Invoked Function Expression)

特点

  1. 可以立刻被执行,是函式表达式。
  2. 型态:(function"functuin名字"(....)())或是(function"functuin名字"(....))()皆可,後面的()可以填入参数。
  3. 具名函式如果为立即函式型态,则无法再次执行。
  4. 匿名函式也会立刻执行。
        function functionName() {
            console.log("呼叫成功");
        };
        functionName();      //呼叫成功
        
        
        
        (function functionName2() {
            console.log("呼叫成功2");
        }());                //呼叫成功2
        functionName2();     //出现错误讯息:functionName2 is not defined
        
        
        
        
        (function () {
            console.log("匿名函式呼叫成功");
        }());               //匿名函式呼叫成功
        
        
        *填入参数*
        (function (参数输出) {
            console.log(参数输出);
        })('我要呼叫');    //我要呼叫
        
        (function (output) {
            console.log(output);
            return output;
        })('input');      //input

        (function (output) {
            console.log('123');
            return output;
        })('input');     //123
        
        
        
        var result = (function (output) {
            console.log('123');
            return output;
        })('input');        //123

        console.log(result);//input
        
        
        

立即函式间取值:

        var a = {};                         把变数a的值(物件的address)当成参数带入立即函式内
        (function (参数b) {
            参数b.person = 'TOM';
        })(a);
        console.log(a);                    //{person: 'TOM'}
        (function (参数c) {
            console.log(参数c.person);     //TOM,因为取相同的值(物件的address)当成参数。
        })(a);       

延伸:

        (function (参数b) {
            参数b.person = 'TOM';
        })(window);                  
        (function (参数c) {
            console.log(person);     //TOM
        })();

延伸解:

  1. 把window(浏览器)作为物件(属全域物件),并把address当作参数,并挂上属性person且值为'Tom'。
  2. 第二个立即函式无须填入参数,因为window本身的address就是参数。

观念厘清: return 跟 console.log。

function add(a, b) {
   console.log(a + b)
 }
 add(1, 2)

上方会出现3的结果,是因为function add执行了里面的console.log。

        function add(a, b) {
            return a + b
        }
        add(1, 2);               //无结果。
        console.log(add(1, 2));  //3
        var x = add;
        console.log(x);          //ƒ add(a, b) {return a + b}
        console.log(x(1, 2));    //3

参考:

  1. [JS] 函式参数、算数、回传、函式间互相传递:https://medium.com/%E9%A6%AC%E6%A0%BC%E8%95%BE%E7%89%B9%E7%9A%84%E5%86%92%E9%9A%AA%E8%80%85%E6%97%A5%E8%AA%8C/js-%E5%A6%82%E4%BD%95%E9%81%8B%E7%94%A8%E5%87%BD%E5%BC%8F%E9%80%B2%E8%A1%8C%E9%81%8B%E7%AE%97-a2c2a560a86c

<<:  Linux 移动档案夹

>>:  【Vue】引入 Vue Carousel 轮播图套件| 专案实作

[神经机器翻译理论与实作] 从头建立英中文翻译器 (VI)

前言 今天接着完成翻译任务实作的第二阶段-模型推论。 翻译器建立实作 重新评估翻译模型 上次由於输入...

Day 8 Self-attention(二) 如何算出input彼此是相关的?

前言 昨天讲到为什麽要使用self-attention,今天稍微来介绍一下self-attentio...

语音服务-文字转换语音范例(text-to-speech)

今天反过来,试试文字转换语音的范例 跟前天的语音服务-语音转换文字范例(from-file)一样 把...

[2021铁人赛 Day17] General Skills 14

引言 今天讲的东西会稍微多一点, 我们直接开始吧~ General Skills / Based ...

Day 2:414. Third Maximum Number

今日题目 题目:414. Third Maximum Numbe 题目主题:Array, Sorti...