js关于变量声明 var let const 区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/slq_lly/article/details/83146629

关于定义(声明)变量

ES6之前定义变量是用 var ,那么var有什么问题吗,如果但但从变量上来说是没有问题的,var是variable的缩写,英文翻译是变量。

var问题:

1.污染全局

之前定义循环的方式:

        for(var i=0; i<10; i++){
            //dosmthing
        }

        alert(i);

有一天突然运营文件,这个时候弹出的是 10 ,这个时候发现有问题。因为定义的i是一个全局变量,也就是说在之前的版本会有作用域问题,一个是全局作用域,一个是函数(局部)作用域;

2.预解析问题(变量提示)

           

​
       var a = 'hello'; 
        function fn(){
            alert(a);
            var a='world';

        }
        fn();

​

 其实上面的这段代码就等于是下面的这段代码,所以执行函数fn()的时候会报错,undefiend.

       var a = 'hello'; 
        function fn(){
            var a;
            alert(a);
            //var a='world';
            a='world'; 
        }
        fn();

       

在es6中首先引出一个概念就是块级作用域,在es6中有2中新的定义变量,一种是let,一种是const;

let就跟之前var的用法一样,const是定义常量的;

let相比var的好处:

1.具备块级作用域:

见到let就是块级作用域,在什么地方定义就只能在什么地方使用;

2.没有预解析

3.同一个作用域不能重复定义,只能重新赋值

4.for循环,for循环里面是类似父级作用域,花括号里面又是一个作用域,比如

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

const定义的变量是常量,不能修改,常用在以下地方:就是不让别人动你的代码的时候,还常常用在定义host,账号,密码等

const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')

猜你喜欢

转载自blog.csdn.net/slq_lly/article/details/83146629