node.js 函数外定义的变量 函数内赋值后为什么不能带出_(44)python少儿编程之函数(五)--- 作用域...
生活随笔
收集整理的這篇文章主要介紹了
node.js 函数外定义的变量 函数内赋值后为什么不能带出_(44)python少儿编程之函数(五)--- 作用域...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數嵌套
- 在一個函數內定義了另一個函數
- 如圖,定義了一個outer函數,然后在outer函數里面又定義了一個inner()函數,此時我們只能在outer函數調用inner()函數,如果在outer函數外調用inner函數就會報錯,那這里就引出了一個概念,作用域。
- 函數有可見范圍,這就是作用域的概念
- inner這里成為是outer函數的內部函數,不能在外部直接被調用,否則就會報錯!
作用域
- 一個標識符的可見范圍,這就是標識符的作用域,一般常說的是變量的作用域。
- 全局作用域
- 在整個程序運行環境中都可見
- 局部作用域
- 在函數、類等內部可見
- 局部變量使用范圍不能超過其所在的局部作用域
- 如圖,x就是全局作用域 fn1和fn2函數都可以使用 但是y就是只能在fn1內使用,如果再fn2使用就會報錯!
- 為了更明確的理解,我們再來看一個例子
- 都為o,一個是outer2函數的變量,一個是內部函數inner的變量,當我們更改了內部函數o的值你會發現,內部函數打印出來的是97,但是在在外部函數繼續打印的時候,還是原來的65,內部函數的更改,其實沒有影響外部變量o的值,所以這個例子更能反映作用域的概念!
- 從這個例子可以看出
- 外層變量作用域在內存作用域是可見的
- 內層作用域,如果定義了o = 97,其實相當于重新定義了一個變量o,但是這個o并沒有覆蓋外層作用域outer中的o
- 我們再來看一個例子
- 如圖,首先我們全局變量定義了一個x,然后在函數內做了自加1的操作,然后系統就報錯了,這是為什么呢?
- 其實這里也解釋了上面的概念,首先x += 1 就是 x = x +1 ,這個操作等于在foo函數里面又定義了一個x變量,就跟外面的x無關了,但是這個x都沒賦值過,也不知道什么類型,然后就去 +1,自然就報錯了!
- 那怎么解決這個問題呢,有時候我們就想用這個全局變量呢?
全局變量global
- 如圖,使用global關鍵字的變量,將foo內的x聲明為使用外部的全局作用域中定義的x
- 全局作用域中必須有x的定義
- 那如果全局作用域沒有這個定義呢? 答案是要報錯的!
- 那再思考一個問題,如果在內部函數定義全局變量以后,外部能訪問到嗎?
- 如圖,我在foo函數內,定義了一個x=10,然后加1,在外部打印后變成11,說明結果正確!這里的x的作用域一直都是全局的!
- globel總結
- 內部作用域使用x=10的賦值語句會重新定義局部作用域使用的變量x,但是這個作用域一旦使用過globe聲明過,那么x=10就等于為全局作用域的變量x賦值
- 但是即使外部作用域的變量可以在內部作用域使用,但也不要直接那樣用,函數就是為了封裝,跟外界隔離,盡量用函數的形參傳參來解決,所有,最后總結一句話,就是不要用 globel,學習它只是為了深刻理解變量作用域而已!切記!
好了,今天的課程就到這里,此章節還是比較重要的,好好練習一下!
總結
以上是生活随笔為你收集整理的node.js 函数外定义的变量 函数内赋值后为什么不能带出_(44)python少儿编程之函数(五)--- 作用域...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件需求和结构_软件体系结构
- 下一篇: python树莓派系统_树莓派系统 Ra