最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的變量提升和函數(shù)提升

 更新時間:2022年07月04日 14:56:04   作者:wx5e435a4343578  
這篇文章主要介紹了JavaScript中的變量提升和函數(shù)提升,在js中對變量進行操作后打印值經(jīng)常會出現(xiàn)undefined的現(xiàn)象。其實原因是因為js中有一個叫做變量提升的功能

前言

在js中對變量進行操作后打印值經(jīng)常會出現(xiàn)undefined的現(xiàn)象。其實原因是因為js中有一個叫做變量提升的功

舉例:

	var data="lyyyyy";
	getData();
	function getData(){
		//第一次打印
		console.log("data值為: ", data);
		var	data="yyyyyyy";
		//第二次打印
		console.log("data值為: ", data);
	}

打印的值第一個為undefined,而第二個打印的值為yyyyy.

原因:

在執(zhí)行g(shù)etData()方法的時候會在函數(shù)內(nèi)部首先將變量的聲明提升到第一步。然后再聲明函數(shù)內(nèi)部的函數(shù)(如果函數(shù)內(nèi)部有函數(shù)的話)。之后才會按照方法內(nèi)部的邏輯先后順序執(zhí)行代碼。前兩步只是聲明?。?!看到這里應(yīng)該就已經(jīng)知道為什么會有上面那樣的結(jié)果了。

實際的方法內(nèi)部代碼執(zhí)行順序應(yīng)該是這樣的:

	function getData(){
		//一。聲明變量
		var	data;
		//二。聲明函數(shù)(如果函數(shù)內(nèi)部有函數(shù)的話)

		//三。按照代碼的順序執(zhí)行
		console.log("data值為: ", data);
		data="yyyyyyy";
		//第二次打印
		console.log("data值為: ", data);
	}

看到拆分后的代碼執(zhí)行順序?qū)Y(jié)果也就不迷茫了。

為什么有變量提升

那么為什么會出現(xiàn)變量提升這個現(xiàn)象呢?

其實js和其他語言一樣,都要經(jīng)歷編譯和執(zhí)行階段。而js在編譯階段的時候,會搜集所有的變量聲明并且提前聲明變量,而其他的語句都不會改變他們的順序,因此,在編譯階段的時候,第一步就已經(jīng)執(zhí)行了,而第二步則是在執(zhí)行階段執(zhí)行到該語句的時候才執(zhí)行。

javascript變量提升和函數(shù)提升

變量提升是把變量提升提到函數(shù)頂部。需要說明的是,變量提升只是提升變量的聲明,并不會把賦值也提升上來。函數(shù)提升是把整個函數(shù)都提到前面去。函數(shù)表達式不能被提升,函數(shù)聲明形式能被提升。

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<script>
? ? //變量提升
? ? function test(){
? ? ? ? a=2;
? ? ? ? var a;
? ? ? ? console.log(a); ? //2
? ? }

? ? test();

? ? //變量提升,不會把賦值也提升上來
? ? var v='Hello World';
? ? (function(){
? ? ? ? var v;
? ? ? ? console.log(v); ?//undefined
? ? ? ? v='I love you';
? ? })();

? ? //函數(shù)聲明形式能被提升
? ? function myTest(){
? ? ? ? foo();
? ? ? ? function foo(){
? ? ? ? ? ? console.log("hello world"); ?//hello world
? ? ? ? }
? ? }
? ? myTest();

? ? //函數(shù)表達式不能被提升
? ? function myTest2(){
? ? ? ? foo(); ? ?//foo is not a function
? ? ? ? var foo =function foo(){
? ? ? ? ? ? console.log("hello world");
? ? ? ? }
? ? }
? ? myTest2();
</script>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<script>
//輸出Goodbye Jack
var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();
//輸出Hello World!
var name2 = 'World!';
(function () {
    if (typeof name2 === 'undefined') {
        name2 = 'Jack';
        console.log('Goodbye ' + name2);
    } else {
        console.log('Hello ' + name2);
    }
})();

//輸出Hello World!
var name3 = 'World!';
(function () {
    if (typeof this.name3 === 'undefined') {
        var name3 = 'Jack';
        console.log('Goodbye ' + name3);
    } else {
        console.log('Hello ' + this.name3);
    }
})();
</script>
</body>
</html>

總結(jié)

  • 1.js會將變量的聲明提升到j(luò)s頂部執(zhí)行,因此對于這種語句:var a = 2;其實上js會將其分為var a;和a = 2;兩部分,并且將var a這一步提升到頂部執(zhí)行。
  • 2.變量提升的本質(zhì)其實是由于js引擎在編譯的時候,就將所有的變量聲明了,因此在執(zhí)行的時候,所有的變量都已經(jīng)完成聲明。
  • 3.當(dāng)有多個同名變量聲明的時候,函數(shù)聲明會覆蓋其他的聲明。如果有多個函數(shù)聲明,則是由最后的一個函數(shù)聲明覆蓋之前所有的聲明。

到此這篇關(guān)于JavaScript中的變量提升和函數(shù)提升的文章就介紹到這了,更多相關(guān)js變量提升內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • 解決layui上傳文件提示上傳異常,實際文件已經(jīng)上傳成功的問題

    解決layui上傳文件提示上傳異常,實際文件已經(jīng)上傳成功的問題

    今天小編就為大家分享一篇解決layui上傳文件提示上傳異常,實際文件已經(jīng)上傳成功的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • JS使用cookie保存用戶登錄信息操作示例

    JS使用cookie保存用戶登錄信息操作示例

    這篇文章主要介紹了JS使用cookie保存用戶登錄信息操作,結(jié)合具體實例形式分析了javascript使用cookie實現(xiàn)針對用戶信息的存儲與讀取相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • Auntion-TableSort javascript類文件

    Auntion-TableSort javascript類文件

    Auntion-TableSort javascript類文件...
    2007-11-11
  • js逆向解密之網(wǎng)絡(luò)爬蟲

    js逆向解密之網(wǎng)絡(luò)爬蟲

    在本篇內(nèi)容里小編給大家整理的是關(guān)于js逆向解密之網(wǎng)絡(luò)爬蟲的相關(guān)知識點內(nèi)容,需要的朋友們參考下。
    2019-05-05
  • JS如何將數(shù)字金額轉(zhuǎn)換成中文金額格式

    JS如何將數(shù)字金額轉(zhuǎn)換成中文金額格式

    這篇文章主要介紹了JS如何將數(shù)字金額轉(zhuǎn)換成中文金額格式,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼

    javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼

    javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼,需要的朋友可以參考下。
    2010-12-12
  • JS中捕獲console.log()輸出的方法

    JS中捕獲console.log()輸出的方法

    這篇文章主要介紹了JS中捕獲console.log()輸出的方法,實例分析了實現(xiàn)獲取console.log輸出的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • js中.sort()函數(shù)的常見用法與高級操作

    js中.sort()函數(shù)的常見用法與高級操作

    JavaScript中的sort函數(shù)可以用來對數(shù)組進行排序,默認情況下sort函數(shù)將數(shù)組中的元素轉(zhuǎn)換為字符串,并按照Unicode碼點的順序進行排序,下面這篇文章主要給大家介紹了關(guān)于js中.sort()函數(shù)的常見用法與高級操作的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • javascript生成隨機數(shù)的方法

    javascript生成隨機數(shù)的方法

    這篇文章主要介紹了javascript生成隨機數(shù)的方法,需要的朋友可以參考下
    2014-05-05
  • 最新評論

    长寿区| 滦南县| 宁强县| 吉木乃县| 普陀区| 郑州市| 佛坪县| 昭通市| 宣武区| 准格尔旗| 胶州市| 青田县| 冀州市| 江源县| 台南县| 兴海县| 德安县| 务川| 旅游| 德江县| 抚远县| 博客| 电白县| 黔江区| 泽州县| 泸水县| 淄博市| 子洲县| 绥棱县| 寿光市| 罗城| 宜城市| 黄浦区| 高淳县| 紫云| 文水县| 霍州市| 阿尔山市| 定陶县| 铁岭县| 安岳县|