今天照着vue-router官方文档的demo,敲了一次,在本地运行的时候遇到了一个问题。
文档demo地址:下面是我的全部代码:
vue-router Hello App!
Go to Foo Go to Bar
说明:代码是没有bug,粘贴到jsfiddle运行是没有问题的。然后在本地运行的时候控制台报这样一个错:
我理解的意思大概是:不能新建一个会覆盖全局属性的变量'app'。到这里我还是不理解这个错误是怎么回事。接着我很粗暴地谷歌了一下报错信息:“can't create duplicate variable that shadows a global property”。发现stackoverflowy有位兄弟也遇到一样的报错。我们的共同点就是,用了const定义常量。有个人给出的解决方法是,把const替换成var,但是没有说明原因。我马上修改了我的代码,把所有const都替换成var,问题居然真的解决了。
接着我去问了大神,得到这样的答案:const 和 var 是不一样的,const 是常量,不能做任何修改,但是显然 vue 是会在 app 上挂载一些属性。也就是我修改了一个常量,浏览器当然会抛出错误。
那为什么在本地运行代码才会抛出错误呢?我的理解是这样的:jsfiddle上有像Babel这样的转码器将ES6代码转为ES5代码,可是我的本地运行的没有,所以报错。
以上~