js中的作用域與預解釋

在開始之前先寫一下js中的數(shù)據(jù)類型
. 基本數(shù)據(jù)類型 number如蚜, boolen 压恒,string ,null错邦, undefined
. 對象數(shù)據(jù)類型 object {} [] /$/,date (對象探赫,數(shù)據(jù)撬呢,正則伦吠,日期) ,function

拋出問題:

    console.log(num);
    console.log(fn);
    console.log(fn());

    var num =12 ;
    var obj ={
        name: "rapheal",
        age:"20"
    }
    function fn(){
        console.log("我是執(zhí)行結果");
        return "";
    }

    console.log(num);
    console.log(fn);
    console.log(fn());

執(zhí)行結果是

圖片.png
  1. 為什么第一次num 是 undefined 而 fn 不是魂拦?

作用域

書面解釋: 作用域是指程序源代碼中定義變量的區(qū)域。我覺得更好的解釋是內(nèi)存中開辟的一段內(nèi)存空間芯勘。
函數(shù)的作用域在函數(shù)定義的時候就決定了潭千。(不理解后面會有解釋)

當html頁面加載的時候,瀏覽器首先會提供一個全局的js 執(zhí)行的作用域, 也就是 window 對象(NODE的 global對象)

預解釋
預解釋 也叫變量提升

在當前作用域中在js 執(zhí)行之前,瀏覽器會默認的先把所有var 和function 進行提前聲明或者定義

(1)聲明和定義
聲明: var num ; 告訴當前作用域有一個num 的對象; 但是該對象是沒有定義的是undefined掉冶;
定義:給變量賦值 num = 12真竖;

(2)var和 function 在預解釋的時候進行的操作上還是不一樣的,
var在在預解釋的時候只進行了變量聲明
function 在預解釋的時候 聲明和定義都完成了

到目前為止 就能解釋 文章開始的時候提出的問題了璧亚。讨韭。。

(3) 預解釋 只發(fā)生在當前作用域下面癣蟋,頁面開始的時候只對window 下面的進行預解釋透硝,函數(shù)內(nèi)部的 代碼只有執(zhí)行的時候才開始預解釋

預解釋的特點

  1. 預解釋中如果有條件,無論條件是否成立疯搅,都會把 帶var 的變量進行提前聲明 如下demo 輸出的 undefined
  if(!('num' in window)){
        var num =12 ;
    }
    console.log(num); // 輸出 undefined
  1. 預解釋的時候只預解釋 '='左邊的濒生,右邊的是值不參與預解釋
//    fn2();  //Uncaught TypeError: fn2 is not a function
//    var  fn2 =function () {
//        console.log('fn2');
//    }
//    fn();
//    function fn() {
//        console.log('fn');
//    }
//    fn();

3.自自行函數(shù)在全局作用域下不進行預解釋,當代碼執(zhí)行到位置的時候定義和執(zhí)行一起完成

4.函數(shù)體 return 下面的代碼雖然不執(zhí)行幔欧,但是需要進行預解釋,return 后面跟的都是我們的返回值罪治,所有不進行定義

 function fn3() {
        console.log(num3);  //=> undefined
        return function () {

        };
        var num3 = 100;
    }
    fn3();

作用域

剛才說頁面加載 js 代碼執(zhí)行的時候 會有一個全局的作用域。
私有作用域: 函數(shù)執(zhí)行的時候會生成一個私有的作用域琐馆。

全局變量: 在全局作用域下聲明的變量是全局變量
私有變量: 在"私有作用域的聲明的變量"和"函數(shù)的形參"都是私有變量

作用域鏈:在私有作用域中规阀,我們的代碼執(zhí)行的時候遇到一個變量,首先我們需要確定它是否是私有變量瘦麸,如果是私有變量谁撼,那么和外面的沒有任何關系,如果不是私有的滋饲,則往當前作用域的上級作用域查找厉碟,如果上級作用域也沒有則繼續(xù)查找,一直找到window 為止 屠缭;箍鼓,,呵曹,款咖,(作用域鏈)

作用域特點
(1) 在全局作用域中何暮,帶var 和不帶var 的區(qū)別

// 區(qū)別 :帶var 的是可以進行預解釋的,所以在賦值前面執(zhí)行不會報錯铐殃,不帶var 的是不能進行預解釋的海洼,在前面執(zhí)行會報錯;
// 關系: num2=12 =》 相當于給window 增加了一個叫做num2的屬性名富腊,屬性值是12

console.log(num);  //undefined                                      
console.log(num2);  //Uncaught ReferenceError: num2 is not defined  
var num=1;                                                          
  num2 = 10;                                                        

(2)私有作用域中出現(xiàn)一個不是私有的變量坏逢,則往上級作用域查找,一直找到window 為止赘被,如果window 下也沒有,會在window 作用域增加一個變量

function fn() {         
    console.log(total); 
    total =10;          
}                       
fn();                   

(3)看當前函數(shù)是在哪個作用域下定義的是整,那么他的上級作用域就是誰 和函數(shù)在哪執(zhí)行的沒有任何關系

 var num = 12;
    function fn() {
        var num =120;
        return function () {
            console.log(num);
        }
    }
    var f= fn();
    f();
    !function () {
      var num = 1200;
        f();
    }()

先寫這么多吧,有什么問題大家一塊討論民假。浮入。。阳欲。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舵盈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子球化,更是在濱河造成了極大的恐慌秽晚,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筒愚,死亡現(xiàn)場離奇詭異赴蝇,居然都是意外死亡,警方通過查閱死者的電腦和手機巢掺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門句伶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陆淀,你說我怎么就攤上這事考余。” “怎么了轧苫?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵楚堤,是天一觀的道長。 經(jīng)常有香客問我含懊,道長身冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任岔乔,我火速辦了婚禮酥筝,結果婚禮上,老公的妹妹穿的比我還像新娘雏门。我一直安慰自己嘿歌,他們只是感情好掸掏,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搅幅,像睡著了一般阅束。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茄唐,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音蝇更,去河邊找鬼沪编。 笑死,一個胖子當著我的面吹牛年扩,可吹牛的內(nèi)容都是我干的蚁廓。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼厨幻,長吁一口氣:“原來是場噩夢啊……” “哼相嵌!你這毒婦竟也來了?” 一聲冷哼從身側響起况脆,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤饭宾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后格了,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體看铆,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年盛末,在試婚紗的時候發(fā)現(xiàn)自己被綠了弹惦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡悄但,死狀恐怖棠隐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情檐嚣,我是刑警寧澤助泽,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站净嘀,受9級特大地震影響报咳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挖藏,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一暑刃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膜眠,春花似錦岩臣、人聲如沸溜嗜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炸宵。三九已至,卻和暖如春谷扣,著一層夾襖步出監(jiān)牢的瞬間土全,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工会涎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裹匙,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓末秃,卻偏偏與公主長得像概页,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子练慕,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容