Javascript 巴贝尔重复函数名
我有一个使用gulp和babel的构建过程,但babel在我的应用程序中给了我这个奇怪的重复函数名 Chrome中的错误是:Javascript 巴贝尔重复函数名,javascript,gulp,ecmascript-6,babeljs,Javascript,Gulp,Ecmascript 6,Babeljs,我有一个使用gulp和babel的构建过程,但babel在我的应用程序中给了我这个奇怪的重复函数名 Chrome中的错误是:ReferenceError:changeScale未定义 原代码: changeScale = function(value) { if (value >= 1000000) return value/1000000 + 'M'; if (value >= 1000) return value/1000 + 'k'; return
ReferenceError:changeScale未定义
原代码:
changeScale = function(value) {
if (value >= 1000000) return value/1000000 + 'M';
if (value >= 1000) return value/1000 + 'k';
return value;
};
gulp和babel之后的代码:
changeScale = function changeScale(value) {
if (value >= 1000000) return value / 1000000 + 'M';
if (value >= 1000) return value / 1000 + 'k';
return value;
};
注意到重复的函数名了吗
我的吞咽任务:
var gulp = require('gulp');
var gutil = require('gulp-util');
var bower = require('bower');
var babel = require("gulp-babel");
var concat = require('gulp-concat');
gulp.task('js', function() {
gulp.src('./www/app/**/*.js')
.pipe(babel())
.pipe(concat('app.js')).on('error', errorHandler)
.pipe(gulp.dest('./www/js/'));
});
和my.babelrc文件:
{“presets”:[“es2015”]}
您的代码正在为名为changeScale
的变量分配一个匿名函数,但没有var
关键字,您正在创建一个全局变量。Babel的输出可能设置为使用ES5 strict模式,该模式不允许在没有var
关键字的情况下定义全局变量,因此Chrome抛出了ReferenceError
,因为该变量从未定义过
您可以通过将代码更改为var changeScale=
,或者从使用变量更改为使用函数声明来解决此问题function changeScale(){}
。这两种方法都可以很好地发挥作用,您可以了解其中的差异
顺便说一句,您在这里看到的重复函数名不是问题–将命名函数分配给变量是完全有效的,它可以使调试代码变得更容易,因为调试器将能够向您显示该名称,而不只是将其作为匿名函数列出。您的代码将匿名函数分配给名为
changeScale
的变量,但如果没有var
关键字,您将创建一个全局变量。Babel的输出可能设置为使用ES5 strict模式,该模式不允许在没有var
关键字的情况下定义全局变量,因此Chrome抛出了ReferenceError
,因为该变量从未定义过
您可以通过将代码更改为var changeScale=
,或者从使用变量更改为使用函数声明来解决此问题function changeScale(){}
。这两种方法都可以很好地发挥作用,您可以了解其中的差异
顺便说一句,您在这里看到的重复函数名不是问题–将命名函数分配给变量是完全有效的,它可以使调试代码变得更容易,因为调试器将能够向您显示该名称,而不只是将其作为匿名函数列出。您可以将babelrc browsers list的IE版本设置为11,这样可以更改。
像
[>5%,“last 2 versions”,“IE 11”]
您可以将babelrc浏览器列表的IE版本设置为11,您可以更改此设置。
像
[>5%,“last 2 versions”,“IE 11”]
它们并不奇怪,它们是ES6:所有分配给某个对象的匿名函数表达式都会被命名。不,它们不是你犯错的原因。告诉我们你在哪里尝试调用这个函数,在哪一行你得到这个异常。它们并不奇怪,它们是ES6:所有分配给某个对象的匿名函数表达式都会被命名。不,它们不是你犯错的原因。告诉我们您试图在何处调用此函数,以及在哪一行获得该异常。谢谢!刚刚进入es6,仍然是一个与它有关的问题,汉克斯!刚刚进入es6,仍然是个麻烦