我试图弄清楚为什么对象文本中的箭头函数被调用为window
作为this
。有人能给我点见识吗?
var arrowObject = {
name: 'arrowObject',
printName: () => {
console.log(this);
}
};
// Prints: Window {external: Object, chrome: Object ...}
arrowObject.printName();
var functionObject = {
name: 'functionObject',
printName: function() {
console.log(this);
}
};
// Prints: Object {name: "functionObject"}
functionObject.printName();
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(undefined);
}
};
var functionObject = {
name: 'functionObject',
printName: function printName() {
console.log(this);
}
};
控制台日志来自Fiddle(其中使用strict;
不使用)。
请注意,Babel转换假设是严格模式,但是窗口
的结果表明您在宽松模式下运行代码。如果你告诉巴别塔假设松散模式,它的Transpililation是不同的:
var _this = this; // **
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(_this); // **
}
};
请注意_this
全局和console.log(_this);
,而不是严格模式Transpilation中的console.log(未定义);
。
我试图弄清楚为什么对象文本中的箭头函数被调用为window
作为this
。
var arrowObject = {
name: 'arrowObject',
printName: () => {
console.log(this);
}
};
...此
是窗口
。(这表明您没有使用严格模式;我建议在没有明确理由不使用严格模式的情况下使用严格模式。)如果是其他值,例如严格模式全局代码的undefined
,则箭头函数中的this
将是其他值。
如果我们将初始化器分解为其逻辑等效项,那么创建箭头函数的上下文可能会更清楚:
var arrowObject = {};
arrowObject.name = 'arrowObject';
arrowObject.printName = () => {
console.log(this);
};
我以为我理解了和箭头函数之间的关系,但是下面的代码片段让我怀疑我的理解。 我知道箭头函数捕获包含上下文的值。我原以为是对象,但它是。 有人能帮我理解为什么会这样吗?
问题内容: 从箭头函数返回对象时,由于语法上的歧义,似乎有必要使用额外的和关键字集。 那意味着我不会写,但必须写。 如果arrow函数返回的不是对象,则和都是不必要的,例如:。 返回。 修饰符抛出 “::意外标记:‘”。 有什么明显的我想念的吗? 问题答案: 您必须将返回的对象文字包装在括号中。否则,花括号将被视为表示功能的主体。以下作品: 您不需要将任何其他表达式包装到括号中: 等等。
不鼓励将箭头函数(“lambdas”)传递给 Mocha。Lambdas词法绑定 this,无法访问 Mocha 上下文。例如,以下代码将失败: describe('my suite', () => { it('my test', () => { // should set the timeout of this test to 1000 ms; instead will fail thi
ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 在继续学习箭头函数之前,请测试你的浏览器是否支持ES6的Arrow Function: 'use strict'; ---- var f
我想知道是否有人能解释一下:
以下是相关代码: 我正在使用babel将es6代码翻译成javascript。这是错误消息: 为什么会出现语法错误?