Javascript 巴贝尔重复函数名

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

我有一个使用gulp和babel的构建过程,但babel在我的应用程序中给了我这个奇怪的重复函数名

Chrome中的错误是:
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,仍然是个麻烦