成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Javascript中的變量提升、函數(shù)提升及變量訪問原則

zhigoo / 2852人閱讀

摘要:變量提升什么是變量提升在函數(shù)體內(nèi)聲明的變量,無論你是在函數(shù)的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數(shù)的最頂端相當于第一行,但是只是提升變量的聲明,不會賦值。

1、變量提升

什么是變量提升?
在函數(shù)體內(nèi)聲明的變量,無論你是在函數(shù)的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數(shù)的最頂端(相當于第一行),但是只是提升變量的聲明,不會賦值。

var num = 10;
fun(); //輸出結(jié)果為undefined
function  fun(){
    console.log(num);
    var num = 20;
}

/*上面這個函數(shù)相當于:
    function  fun(){
        var num;
        console.log(num);
        num = 20;
    }
*/
2、函數(shù)提升

什么是函數(shù)提升?
在JavaScript中以函數(shù)聲明的方式創(chuàng)建的函數(shù)就跟用var創(chuàng)建的變量一樣,它們的聲明都會提前聲明,這就使得我們在JavaScript中可以調(diào)用函數(shù)在前面,而聲明函數(shù)在后面,這就是函數(shù)提升。

func();
function func(){
    alert(“函數(shù)執(zhí)行了!”);
}
/*
上面這段代碼相當于:
function func(){
    alert(“函數(shù)執(zhí)行了!”);
}
func();
*/
3、函數(shù)與變量同名時的變量提升
alert(fun); // 最終輸出結(jié)果為:輸出fun函數(shù)體
function fun(){
    alert(“我是一個函數(shù)”);
}
var fun = “我是一個變量”;
alert(fun); // 輸出:我是一個變量

/* 為什么第一個alert輸出的是fun函數(shù)體,而第二個alert輸出的是“我是一個變量”?
因為用var聲明的變量及function聲明的函數(shù)在執(zhí)行前都會將聲明提升到最前面,如果變量與函數(shù)同名,
那么在聲明的時候會忽略變量,只提升函數(shù)聲明! */

/*
上面這段代碼相當于:
function fun(){
    alert(“我是一個函數(shù)”);
}
alert(fun);
fun = “我是一個變量”;
alert(fun);
*/
4、變量搜索原則(變量訪問原則)

在JavaScript中變量的訪問(搜索)是有原則的:

1)、首先在訪問變量的作用域(函數(shù))中查找該變量,如果找到直接使用
2)、如果沒有找到,去上一級作用域中查找,如果找到直接使用
3)、如果還是沒有找到,則再去上一級作用域中查找,知道全局作用域
4)、如果找到了就直接使用,如果沒有找到則報錯
var num = 123;
function foo1(){
    function foo2(){
        console.log(num);
    }
    /*當調(diào)用foo2時,會首先去foo2這個作用域中查找是否有num變量,結(jié)果沒找到則去上一級作用域(即foo1)中查找是否有foo1變量,
    結(jié)果還 是沒找到,則再去上一級作用域(全局作用域)中查找,結(jié)果找到了,則拿來使用*/
    foo2();
}
5、變量提升、變量搜索機制經(jīng)典面試題
fun();

console.log(b);
console.log(c);
console.log(a);

functoin fun(){
    var a = b = c = 9;
    console.log(a);
    console.log(b);
    console.log(c);
}

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/100695.html

相關文章

  • js-編譯原理與聲明提升

    摘要:編譯原理在傳統(tǒng)編譯語言的流程中,程序中的一段源代碼在執(zhí)行之前會經(jīng)歷三個步驟,統(tǒng)稱為編譯。定義聲明是在編譯階段進行的,而賦值是在執(zhí)行階段進行的。 編譯原理 在傳統(tǒng)編譯語言的流程中,程序中的一段源代碼在執(zhí)行之前會經(jīng)歷三個步驟,統(tǒng)稱為編譯。 詞法分析將由字符組成的字符串分解成(對編程語言來說)有意義的代碼塊,這些代碼塊被稱為詞法單元(token)。 語法分析這個過程是將詞法單元流(數(shù)組)轉(zhuǎn)...

    zhongmeizhi 評論0 收藏0
  • 弄懂JavaScript的作用域和閉包

    摘要:關于本書,我會寫好幾篇讀書筆記用以記錄那些讓我恍然大悟的瞬間,本文是第一篇弄懂的作用域和閉包。作用域也可以看做是一套依據(jù)名稱查找變量的規(guī)則。聲明實際上是根據(jù)你傳遞給它的對象憑空創(chuàng)建了一個全新的詞法作用域。 《你不知道的JavaScript》真的是一本好書,閱讀這本書,我有多次哦,原來是這樣的感覺,以前自以為理解了(其實并非真的理解)的概念,這一次真的理解得更加透徹了。關于本書,我會寫好...

    everfly 評論0 收藏0
  • ES6 變量作用域與提升變量的生命周期詳解

    摘要:不同的是函數(shù)體并不會再被提升至函數(shù)作用域頭部,而僅會被提升到塊級作用域頭部避免全局變量在計算機編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎與實踐技巧系列文章。本文詳細討論了 JavaScript 中作用域、執(zhí)行上下文、不同作用域下變量提升與函數(shù)提升的表現(xiàn)、頂層對象以及如何避免創(chuàng)建...

    lmxdawn 評論0 收藏0
  • 夯實基礎-作用域與閉包

    摘要:作用域分類作用域共有兩種主要的工作模型。換句話說,作用域鏈是基于調(diào)用棧的,而不是代碼中的作用域嵌套。詞法作用域詞法作用域中,又可分為全局作用域,函數(shù)作用域和塊級作用域。 一篇鞏固基礎的文章,也可能是一系列的文章,梳理知識的遺漏點,同時也探究很多理所當然的事情背后的原理。 為什么探究基礎?因為你不去面試你就不知道基礎有多重要,或者是說當你的工作經(jīng)歷沒有亮點的時候,基礎就是檢驗你好壞的一項...

    daydream 評論0 收藏0
  • 理解JavaScript的核心知識點:作用域

    摘要:也毫不例外,但在中作用域的特性與其他高級語言稍有不同,這是很多學習者久久難以理清的一個核心知識點。主要使用的是函數(shù)作用域。 關于作用域:About Scope 作用域是程序設計里的基礎特性,是作用域使得程序運行時可以使用變量存儲值、記錄和改變程序的狀態(tài)。JavaScript 也毫不例外,但在 JavaScript 中作用域的特性與其他高級語言稍有不同,這是很多學習者久久難以理清的一個核...

    HelKyle 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<