JS的var和let、const使用(詳細講解)


let是ES6新增的,它主要是彌補var的缺陷,你也可以把let看做var的升級版。下面我就來詳細講講var和let的區別

var和let的區別

不同點:

(1)var是全局作用域,let不是

var 和 let 聲明的變量在全局作用域中被定義時,兩者非常相似。但是,被let聲明的變量不會作為全局對象window的屬性,而被var聲明的變量卻可以

let  a = 'aaa;
var b = 'bbb'; 

console.log(window.a); // undefined
console.log(window.b);  //'bbb'

(2)var沒有塊級作用域,let有塊級作用域

let有塊級作用域,而var沒有塊級作用域,這是二者最明顯的區別。例如:

var func;
if(1 == 1){
    var name = "LHS"
    func = function(){
        console.log(name)
    }
}

name = "ljq";
func();//輸出的:ljq

一般情況我們都希望把塊級內的與塊級內數據區分,但var沒有塊級作用域,只有函數作用域

如果大家還不理解,我再舉例子:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>閉包</title>
        <style type="text/css">
            div {
                width: 100px;
                height: 100px;
                background: lightgreen;
                float: left;
                margin: 20px;
                font: 30px/100px "microsoft yahei";
                text-align: center;
            }
        </style>
    </head>
    <body>
        <div>a</div>
        <div>b</div>
        <div>c</div>
        <div>d</div>
        <div>e</div>
        <div>f</div>
        <div>g</div>
        <div>h</div>
        <div>i</div>
        <div>j</div>
    </body>
    <script type="text/javascript">
        var divs=document.getElementsByTagName("div");
        for (var i=0;i<divs.length;i++) {
            divs[i].onclick=function(){
               alert(i);//都是輸出:10
            }
        }
    </script>
</html>

運行結果,點擊輸出都是10

以上問題就是var沒有塊級作用域,我們可以把函數作用域代替了塊級作用域,用閉包解決問題:

var divs=document.getElementsByTagName("div");
for (var i=0;i<divs.length;i++) {
    (function(i){
        divs[i].onclick=function(){
            alert(i);
        }
    })(i)
}

閉包寫起來有點麻煩,但使用let的話就可以一步到位:

var divs=document.getElementsByTagName("div");
for (let i=0;i<divs.length;i++) {
    divs[i].onclick=function(){
        alert(i);
    }
}

結果跟使用閉包一樣,但比閉包簡單

(3)var屬於ES5規范,let屬於ES6規范

相同點:

(1)var和let都有函數級作用域

 

 

const

(1)const定義的值不可以修改,而且必須初始化

(2)const是常量,var和let是變量

(3)常量的含義是指對象不能修改,但是可以改變對象內部的屬性,如:

const app = {
    id:1,
    name:"lhs"
}
app.name="ljq";
console.log(app.name);//輸出:ljq

 

 

es6對象字面量增強

相對於ES5,ES6的對象字面量得到了很大程度的增強。這些改進我們可以輸入更少的代碼同時語法更易於理解。那就一起來看看對象增強的功能。

屬性增強寫法

//屬性增強寫法
const id = 1;
const name = "LHS";
const age = 20
const app = {
    id,
    name,
    age,
}
console.log(app);

函數增強寫法

//函數增強寫法
const ipp = {
    msg(){
        console.log("函數增強寫法");
    }
}
ipp.msg();

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM