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不存在。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先说区别 1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;2.使用let声明的变量,其...
    程序员是粉色的阅读 41,280评论 9 20
  • var 声明的是全局变量,let声明的是块级变量。 下面内容是摘自let闭包理解,觉得讲的很不错; var a=[...
    笨笨的小蜗牛_用生命奔跑阅读 745评论 0 0
  • js的作用域只有全局作用域和函数作用域,为了能在{ }来限定变量,所以使用了let来限制变量只能在块作用域中有效 ...
    Nirean阅读 482评论 0 0
  • 当时应聘的时候被问到过这个问题,所以记录下 var和let的区别 1.let是作用于代码块中(就是{}),var是...
    遥啊遥啊遥啊阅读 707评论 0 1
  • let声明的变量只在其声明的块或子块中可用,这一点,与var相似。二者之间最主要的区别在于var声明的变量的作用域...
    泡杯感冒灵阅读 193评论 0 0