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