var和let的区别

今天在写代码的时候引用了d3画词云的插件d3-cloud,插件中自带的例子可以满足我的需求,但是因为想跟上新特性,就将var修改成了let,但后来总报错,不知道为什么,一点点比对发现这个不同,代码如下图所示:


image.png
image.png

图片显示不清晰,实际上这一大段,包括 function draw(),是在一个函数内的,即successCallBack(),
当 var layout 改成 let layout后,总提示 layout is not a function,也就是在function draw里调用layout时出现的问题,这个是由ES6中新特性let和原var的区别造成的。
1 作用域
var的作用域是在定义的函数内,即在successCallBack()内,和function draw()在一个作用域内,而let是块级作用域,只在if(res.data.success)里面有效,所以draw并不能访问到layout。

2 变量提升
var是有变量提升的,也就是所有的var变量都会提到函数的最前面,可以在声明前使用,而let不存在。

所以,不一定所有用法都用新特性,而是该弄清楚差别,选择合适的使用。

你可能感兴趣的:(var和let的区别)