Day-12 函式与变数

承前文,在函式中的结构中,包括变数。使用变数,就须宣告,因此宣告所及的范围(Scope)成为函式、乃至整个程序能否执行、怎样执行的要害所在。

变数的范围

耳熟能详的「区域变数」、「全域变数」,在这里有其明确范围。「区域」者,指函式区域之内。「全域」者,指写在函式之外、影响整个程序范围的变数。

若函式本身「没有宣告」变数(区域),就会往函式外找「有宣告」的同一变数(全域)。如:

var rebellionStory = 23

var boxOffice = function (firstTwo){
    //内部没有变数rebellionStory,就会往外找,找到带参数23的全域变数rebellionStory
    //若整个程序都没有rebellionStory,就会引发错误 "rebellionStory is not defined"
    return rebellionStory + firstTwo;
};

console.log( boxOffice(12) ); //得出35

此处须留意者,是力场(误)函式可以「单向」「向外」读取变数,但外层读不到函式内的变数。
https://ithelp.ithome.com.tw/upload/images/20211011/20141041ddLQx6R8nJ.jpg

为什麽?因为QB做了调整(再误)。
https://ithelp.ithome.com.tw/upload/images/20211011/20141041tqMsS57YcE.png

函式里的变数宣告,只对函式里有效。在规则中,function{ } 可以关住:var、let、const宣告。而 { } 只能关住:let、const。也就是说:

  • for(var…){} 的宣告效力会溢出到外面。
  • for(let…){} 因为有{}所以会锁在 scope 里。

在以var宣告的情况下,若函式内的变数只有「指派」、没有「宣告」,会令函式**「向外寻找同名变数」**:

  • 若找到,会改变/污染它,让他变成自己(该函式)的值
  • 若没有,会直接「假设」一个「全域变数」。

有关引数/参数/回传值的若干规则,具列如下:

  • function内的值也需要宣告,不然会变成全域变数(全域物件)
  • 引数带入参数(parameter),成为变数(argument)。
  • JS参数引数可以不同
    • 引数 < 参数:没给引数的参数,为 undefined。
    • 引数 > 参数:多余的引数无用,不会印出。
  • 所有的function都有回传值,undefined也算是一种,没有回传值 = 甚麽都看不到
  • return会做两件事:
    • 把控制权转移到刚刚呼叫函式的地方
    • 把值传回去

变数的提昇

在函式内,若在变数被宣告前就使用(亦即console.log变数先於var变数),程序会在函式范围内寻找变数。确认其存在後,便不会判定错误,而是给出尚未定义(undefined)提示。

详如Day-02说明
https://ithelp.ithome.com.tw/articles/10264852


<<:  Python 练习

>>:  RISC-V: I-type 移位指令

[14] [烧瓶里的部落格] 04. Templates 模板

我们已经写好验证的 views,但是如果现在启动服务的话 无论开启哪个 URL,都会看到一个Temp...

Day05 UIKit 04 - 在 Storyboard 上设计画面

在 Storyboard 上设计画面 接下来我们来在一开始建立的专案上设计画面,首先我们在专案导览器...

[FGL] 程序开发(2) - 4类6个交谈指令-功能选单部分

FGL程序运行时可用的画面已经可做出来了,但总不能只是拿来 DISPLAY TO 资料,应该要拿来...

[2021铁人赛 Day07] General Skills 04

引言 昨天学了 chmod 命令的用法,这边大概整理几个简单用法: $ chmod 参数 目标档案...

修改word 作者属性

删除作者 作法1 : 直接修改 删除作者,删掉,从这边删掉,按确定就可以了 作法2 : 移除档案属性...