Javascript visual studio和chrome的let和const问题
我有一个奇怪的问题,google chrome不会阅读es6,比如Javascript visual studio和chrome的let和const问题,javascript,visual-studio,Javascript,Visual Studio,我有一个奇怪的问题,google chrome不会阅读es6,比如let或const或在对象内部定义函数的新方法 如果我使用var它会很好地工作: var cat = { name: 'meow', age: 5, eyeColor: 'black' } 如果我使用let或const它将不起作用: let cat = { name: 'meow', age: 5, eyeColor: 'black' } 这给了我一个错误: cat is not
let
或const
或在对象内部定义函数的新方法
如果我使用var
它会很好地工作:
var cat = {
name: 'meow',
age: 5,
eyeColor: 'black'
}
如果我使用let
或const
它将不起作用:
let cat = {
name: 'meow',
age: 5,
eyeColor: 'black'
}
这给了我一个错误:
cat is not defined
好的,我想了些什么,首先是我的文件夹结构:
build
assets
js
app.js
vendors.js
source
js
app.js
vendors
gulpfile.js
我正在源文件夹中编写所有代码,并将其gulp编译到build文件夹中,这是我的gulp文件(抱歉,文件太长):
当我直接在build js文件中编写代码时,它工作得很好,但是如果我在源文件夹中编写js,它将只编译var,但是如果我尝试let或const,它将不会使用
let
更改变量cat
的范围。声明中没有生成错误(打开Chrome控制台并粘贴您的示例以向自己证明这一点)
报告说:
let
语句声明块作用域局部变量
比较给出的例子。下面是让:
let x = 1;
if (x === 1) {
let x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 1
下面是var
:
var x = 1;
if (x === 1) {
var x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 2
注意到每个示例的第一个和第二个输出的差异吗?简而言之,错误实际上存在于尚未共享的代码中。此示例突出显示了不同之处:
if (true) {
var myVariable = 1;
let myOtherVariable = 2;
}
console.log(myVariable); //Outputs '1'
console.log(myOtherVariable); //Fails
好吧,我修复了它,以防有人遇到这个问题。你所要做的就是将babel添加到手表任务中,如下所示:
gulp.task('scripts', function() {
return gulp.src('source/js/*.js')
.pipe(babel({
presets: ['@babel/env']
}))
.pipe(uglify())
.pipe(plumber())
.pipe(gulp.dest('build/assets/js'))
});
请说得更具体些。Visual Studio代码?哪个版本?Chrome的哪个版本?哪个应用程序显示该错误消息?请添加完整的代码。可能您正试图检索超出其作用域的变量?请让我们知道您在代码中声明变量的位置以及尝试使用变量的位置。var&Let的澄清很好,是的,OP需要共享他的代码。代码与我共享的代码完全相同,我的java脚本文件完全是空的,我正在练习对象,我在遵循一个教程,它给了我这个错误,我使用最新版本或chrome和visual studio代码
gulp.task('scripts', function() {
return gulp.src('source/js/*.js')
.pipe(babel({
presets: ['@babel/env']
}))
.pipe(uglify())
.pipe(plumber())
.pipe(gulp.dest('build/assets/js'))
});