关于定义(声明)变量
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')