91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中的變量提升和函數提升方法

發布時間:2022-07-05 11:35:22 來源:億速云 閱讀:151 作者:iii 欄目:開發技術

本篇內容介紹了“JavaScript中的變量提升和函數提升方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

前言

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

舉例:

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

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

原因:

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

實際的方法內部代碼執行順序應該是這樣的:

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

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

看到拆分后的代碼執行順序對結果也就不迷茫了。

為什么有變量提升

那么為什么會出現變量提升這個現象呢?

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

javascript變量提升和函數提升

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

<!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';
    })();

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

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

JavaScript中的變量提升和函數提升方法

<!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>

“JavaScript中的變量提升和函數提升方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大庆市| 九江市| 丰宁| 盘山县| 芮城县| 蚌埠市| 广安市| 桐庐县| 蓬溪县| 神农架林区| 广南县| 凤庆县| 定西市| 永新县| 龙泉市| 阿坝县| 庐江县| 会东县| 阿城市| 石阡县| 吴桥县| 武山县| 莱西市| 文山县| 永平县| 加查县| 红河县| 耿马| 馆陶县| 梨树县| 德州市| 嘉祥县| 澄江县| 修武县| 吴江市| 华容县| 长岛县| 郴州市| 闸北区| 应用必备| 紫金县|