var和let和const

Posted 摸摸大123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了var和let和const相关的知识,希望对你有一定的参考价值。

var和let和const

var和let的使用:

在ES5中,if 和for的都没有作用域,想要有作用域必须要借助function的作用域(ES5中只有function有作用域

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
    <button>5</button>
</body>
<script src="let和const.js"></script>

</html>
{
    var func;
    if (true) {
        var name = \'why\';
        func = function () {
            console.log(name);
        }
        // func()
    }
    name = \'what\'
    //在中间可以修改name的值
    //ES5的缺陷
    func()
    // if 的块级作用域必须要借助function
}

在下面代码的第 10 行中的var i = 1,在所有地方的i都会赋值为 1,无论在括号内还是括号外都是 1

{
    // for块级作用域必须要借用function
    var btns = document.getElementsByTagName(\'button\')
    // for(var i = 0; i <btns.length;i++){
    //     btns[i].addEventListener(\'click\',function(){
    //         console.log(\'第\'+i +\'个按钮被点击\');
    //     })
    // }
  
    for (var i = 0; i < btns.length; i++) {
        (function (num) {
            btns[i].addEventListener(\'click\', function () {
                console.log(\'第\' + num + \'个按钮被点击\');
            })
        })(i)
        //而闭包可以实现,因为函数自己有自己的作用域,不会受外面的影响,只找属于自己的i

    }
} 
{
    console.log(\'-------ES6定义的let有块级作用域\');
    let btns = document.getElementsByTagName(\'button\');
    for (let i = 0; i < btns.length; i++) {
        btns[i].addEventListener(\'click\', function () {
            console.log(\'第\' + i + \'个按钮被点击\');
        })
    }

}

var和let的使用的范例

var a = [];
for (var i = 0; i < 10; i++) {
    a[i] = function () {
        console.log(i);
    };
}
a[6]()

输出10

若将var改成let
var a = [];
for (let i = 0; i < 10; i++) {
    a[i] = function () {
        console.log(i);
    };
}
a[6]()

输出6

for (let f = 0; f < 3; f++) {
    let f = \'abc\';
    console.log(f);
}

var 命令会发生“变量提升”现象, 即变量可以在声明之前使用,值为 undefined 。声明了未初始化

function fn() {
    var a = 1;
    var a = 2;
}

​ 两个let或是一个let一个var会报错

{
    var fn = [];
    for (let i = 0; i < 5; i++) {
        fn[i] = function (x) {
            return x * i;
        };
    }
    console.log(fn[2](10));
}

输出20,若改为var ,则输出50

const的用法

一旦给const修饰的标识符被赋值后,不能修改

const name = \'why\'
 name = \'abc\'

在使用const 定义标识符,必须进行赋值

  const name,//直接写会报错

常量的含义是指向的对象不能修改,但是可以改变对象内部的属性

const obj = {
        name: \'whr\',
        age: 18,
        height: 1.55
        }
    obj.name = \'ww\';
    obj.age = 22;
    console.log(obj);

对象字面量的增强写法

ES5的写法

const name = \'wwww\';
    const age = 22;
    const height = 1.5
    //ES5的写法
    const obj = {
        name: name,
        age: age,
        height: height,
        run: function () {
            console.log(\'running1\');
        },
        eat: function () {
            console.log(\'eating1\');
        }

    }
    console.log(obj);

ES6语法糖

    //ES6的写法
    const obj = {
        name,
        age,
        height,
        run() {

        },
        eat() {

        }
    }
    console.log(obj);

以上是关于var和let和const的主要内容,如果未能解决你的问题,请参考以下文章

let const和var的区别

var,let,const的区别和用法

const和let和var

let 和 const 命令

let和const命令

1.let 和 const 命令