第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

python 和 js 變量作用域問(wèn)題的不理解

python 和 js 變量作用域問(wèn)題的不理解

本人目前剛學(xué)習(xí)python, 遇到了關(guān)于變量作用域的一些問(wèn)題, 如下:下面這個(gè)就不是非常明白a = 3def f():     a += 4     print(a) f() # UnboundLocalError: local variable 'a' referenced before assignment然后如果稍微改一下:a = 3def f():     b = a + 4     print(a) f() # 3這里新聲明了一個(gè)變量b, 對(duì)a進(jìn)行了引用, 然后就可以訪(fǎng)問(wèn)到a了, 不是明白為什么另外如果將代碼 1 換成js, 結(jié)果又不同var a = 3const f = () => {    a += 4     console.log(a) }a() // 7f() // 7在js中不僅僅能夠訪(fǎng)問(wèn)到全局變量, 甚至可以對(duì)全局變量進(jìn)行修改, 所以在js里面作用域機(jī)制和python又有什么區(qū)別?另外, 本人所了解到j(luò)s與python都是靜態(tài)作用域, 原理應(yīng)該相同, 但是上面顯示的結(jié)果卻很不一樣, 麻煩能有前輩清楚的解答一下, 本人才學(xué)疏淺, 見(jiàn)諒!
查看完整描述

2 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

我來(lái)給你解釋一下吧,
對(duì)于舉例中的python和js中var定義的變量,他們作用域規(guī)則相似

  1. 變量作用域在定義它的函數(shù)內(nèi)(整個(gè)python或js文件可以看做一個(gè)大函數(shù))

  2. 根據(jù)第1點(diǎn):函數(shù)內(nèi)出現(xiàn)與全局中定義的同名變量,在函數(shù)內(nèi),它會(huì)覆蓋全局的。

不同點(diǎn)

  1. js函數(shù)內(nèi)定義變量要明確在變量名前寫(xiě)上var(我們先不討論let和const),否則就是直接調(diào)用全局的

  2. python中定義變量直接寫(xiě)變量名

  3. pyhton函數(shù)中如果想給全局變量賦值,需要在賦值之前寫(xiě)上 global 變量名

基于以上前提知識(shí),請(qǐng)看注釋中的解釋

Python的代碼

a = 3        # 全局的adef f():
    a += 4   # a=a+4, 相當(dāng)于先重新定義一個(gè)新變量a'(函數(shù)體f內(nèi)的a), 
             # 然后執(zhí)行a'+4時(shí)報(bào)錯(cuò):”沒(méi)有賦值就使用“
    print(a) # 沒(méi)執(zhí)行到這步就,已經(jīng)在上面報(bào)錯(cuò)了。f() #調(diào)用時(shí)被報(bào)錯(cuò)
a = 3        # 全局的adef f():    global a # 加上這句后,下面再給賦值,就是針對(duì)全局變量了。
    a += 4   # 全局的a被加4,變?yōu)?了
    print(a) # f() #7
a = 3def f():
    b = a + 4# 此處的a是全局的a
    print(a) # 打印的是全局的a,沒(méi)上面那句b的賦值此處也是全局的af() # 3

Javascript的代碼

var a = 3const f = () => {    a += 4             // 沒(méi)有用var,此處引用的是全局a
    console.log(a)
}a   // 3  此處因?yàn)檫€沒(méi)執(zhí)行f函數(shù),a還沒(méi)有被改變 f() // 7  你的問(wèn)題描述中寫(xiě)的4,正確是7a   // 7  執(zhí)行過(guò)f(), 全局的a已經(jīng)被改變


查看完整回答
反對(duì) 回復(fù) 2018-08-05
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

在 python 中 
a += 4 其實(shí)就是a = a + 4

此時(shí) 相當(dāng)于在函數(shù)內(nèi)部聲明了變量 a, 所以是調(diào)用不到外部的a的。

而在 js 中 a 并不是聲明的新變量,所以結(jié)果會(huì)不同。

js 中聲明變量是需要 var 之類(lèi)的關(guān)鍵字的,python 不需要

如果想要python 中的 a 的指向全局需要明確指定

a = 3def f():    global a // 明確指定是全局變量
    a += 4
    print(a)
f()

python 的代碼轉(zhuǎn)換為 js 代碼其實(shí)是這樣的:

var a = 3;const f = () => {    var a;
    a += 4;    console.log(a) // NaN 因?yàn)閖s的容錯(cuò)機(jī)制,所以并沒(méi)有報(bào)錯(cuò)。}


查看完整回答
反對(duì) 回復(fù) 2018-08-05
  • 2 回答
  • 0 關(guān)注
  • 855 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)