在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 關(guān)于全局變量

關(guān)于全局變量

全局變量是不是沒有加var,就是全局變量?

還是說,如果在上層只要找到了定義過的同名變量,就不成為全局變量了?

小白理解的不透徹,請(qǐng)大佬幫忙解答一下

function a(){
    function b(){
        var aaa = 2;
        function c(){
            aaa = 5;
        }
    
    }

}

請(qǐng)問這個(gè)最內(nèi)層的aaa = 5 aaa 沒加var 是不是就馬上成為了全局變量 , 還是說他的父函數(shù)聲明了, 就不是全局變量了?

回答
編輯回答
雨蝶

我給你舉一個(gè)例子吧,例如在一個(gè) script 標(biāo)簽里,或者是一個(gè) js 文件中。


var a_1 = 6 // 這樣的,直接在最外層聲明的變量,是全局變量

(function fn_1 () {
    var a_2 = 7 // 在函數(shù)內(nèi)層聲明的變量,是屬于這個(gè)函數(shù)的局部變量
    a_3 = 8 // 如果在函數(shù)作用域內(nèi)沒有用 var 關(guān)鍵字聲明的變量,會(huì)被自動(dòng)聲明為全局變量
}())

// 上面這段代碼中,a_1 和 a_3 是全局變量,a_2 是局部變量

還有一種情況是嚴(yán)格模式

// 文件開頭這樣寫,會(huì)進(jìn)入嚴(yán)格模式
'use strict'

var a_1 = 6 
(function fn_1 () {
    var a_2 = 7 
    a_3 = 8 // 同樣的代碼,在嚴(yán)格模式下這樣聲明變量會(huì)報(bào)錯(cuò),a_3 is not defined
}())

推薦去看一下 《js高級(jí)程序設(shè)計(jì)》,里面講的很詳細(xì)

2017年3月2日 20:18
編輯回答
扯不斷

這個(gè)話題……不是一兩句說的清楚的。全局變量涉及到 var、'use strict;、閉包等很多條件,建議題主好好看一本書,比如犀牛書、《JavaScript 高級(jí)程序設(shè)計(jì)》等。

但就問題里的描述來看,c 里面的 aaa 因?yàn)樘幱?b 的閉包中,所以是局部變量,也就是 b 里聲明的。

2017年8月13日 02:21