今天在寫代碼的時候引用了d3畫詞云的插件d3-cloud,插件中自帶的例子可以滿足我的需求邀窃,但是因為想跟上新特性荸哟,就將var修改成了let,但后來總報錯瞬捕,不知道為什么鞍历,一點點比對發(fā)現(xiàn)這個不同,代碼如下圖所示:
image.png
image.png
圖片顯示不清晰肪虎,實際上這一大段劣砍,包括 function draw(),是在一個函數(shù)內(nèi)的扇救,即successCallBack(),
當 var layout 改成 let layout后刑枝,總提示 layout is not a function,也就是在function draw里調(diào)用layout時出現(xiàn)的問題迅腔,這個是由ES6中新特性let和原var的區(qū)別造成的装畅。
1 作用域
var的作用域是在定義的函數(shù)內(nèi),即在successCallBack()內(nèi)沧烈,和function draw()在一個作用域內(nèi)洁灵,而let是塊級作用域,只在if(res.data.success)里面有效掺出,所以draw并不能訪問到layout徽千。
2 變量提升
var是有變量提升的,也就是所有的var變量都會提到函數(shù)的最前面汤锨,可以在聲明前使用双抽,而let不存在。
所以闲礼,不一定所有用法都用新特性牍汹,而是該弄清楚差別,選擇合適的使用柬泽。