规范问题如果在用箭头函数替换函数声明/表达式后发现有关问题的问题,请将其作为此副本的副本关闭.
ES2015中的箭头功能提供了更简洁的语法.我现在可以用箭头功能替换所有函数声明/表达式吗?我需要注意什么?
例子:
构造函数
function User(name) {
this.name = name;
}
// vs
const User = name => {
this.name = name;
};
Run Code Online (Sandbox Code Playgroud)
原型方法
User.prototype.getName = function() {
return this.name;
};
// vs
User.prototype.getName = () => this.name;
Run Code Online (Sandbox Code Playgroud)
对象(文字)方法
const obj = {
getName: function() {
// ...
}
};
// vs
const obj = {
getName: () => {
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
回调
setTimeout(function() {
// ...
}, 500);
// vs
setTimeout(() => {
// ...
}, …
Run Code Online (Sandbox Code Playgroud) 即我该如何表达:
function *(next) {}
Run Code Online (Sandbox Code Playgroud)
带箭头.我已经尝试了所有我能想到的组合,而且我找不到任何关于它的文档.
(目前使用节点v0.11.14)
ECMAScript 2015规范提到关键字(或单词?)new.target正好3次 - 在14.2.3中 1次:
通常,Contains不会查看大多数函数表单但是,Contains用于检测ArrowFunction中的new.target,this和super用法.
在14.2.16中两次:
ArrowFunction不为arguments,super,this或new.target定义本地绑定.对ArrowFunction中的参数,super,this或new.target的任何引用 都必须解析为词汇封闭环境中的绑定
MDN提到它,但非常模糊,页面不完整.
巴别塔似乎不支持它.尝试在函数(箭头或其他)中使用new.target时出现语法错误.
它是什么,它应该如何使用?
我已经看到一些函数定义为function(){}
和一些函数定义为() => {}
.
这与Javascript版ES6有关吗?
此外,如何使用this
关键字从一个函数定义更改为另一个函数定义?
有人可以给我一个关于lexical的简要介绍吗?
"箭头函数表达式(也称为胖箭头函数)与函数表达式相比具有更短的语法,并且词法绑定此值(不绑定它自己的this,arguments,super或new.target).箭头函数始终是匿名的".
这是否意味着当我使用'胖箭'函数中的'this'引用调用函数成员时,'this'总是指封闭的'this'?
在尝试使用ES6为我们提供的=>特性继承上下文后,我注意到这个上下文永远不会被改变.例:
var otherContext = {
a: 2
};
function foo() {
this.a = 1;
this.bar = () => this.a;
}
var instance = new foo;
instance.bar(); // returns 1
instance.bar.bind(otherContext)(); // returns 1
Run Code Online (Sandbox Code Playgroud)
没有=>运算符并使用function关键字:
function foo() {
this.a = 1;
this.bar = function () {
return this.a;
}
}
var instance = new foo;
instance.bar(); // returns 1
instance.bar.bind(otherContext)(); // returns 2
Run Code Online (Sandbox Code Playgroud)
因此,如果我们从外部调用接收函数或者只是在变量中有函数,我们怎么能确定我们是否能够将不同的函数绑定到它或者它是否只是从某个地方继承它?
javascript没有告诉你任何事情听起来很危险,人们可能因为一个非常微妙和困难的bug而陷入困境.
问题是,每当我尝试触发"this.io.emit"事件时,就会发生TypeError.它仅在我在"socket.on"块内写入此语句"this.io.emit"时给出,否则,如果我在该块之外写入它则不会产生错误.
这是调用其他库的主要server.js文件:
const express = require('express'),
http = require('http'),
socketio = require('socket.io');
class App{
constructor()
{
this.port = process.env.PORT || 81;
this.host = `localhost`;
this.app = express();
this.http = http.Server(this.app);
this.socket = socketio(this.http);
}
appConfig(){
new config(this.app);
}
appRoutes(){
new routes(this.app,this.socket).routesDefault();
}
appDefault(){
this.appConfig();
this.appRoutes();
this.http.listen(this.port,this.host,()=> {
console.log(`Listening`);
});
}}
Run Code Online (Sandbox Code Playgroud)
我的服务器端代码是:
'use strict';
class Routes {
constructor(app,socket) {
this.app = app;
this.io = socket;
this.users=[];
}
routesTemplate()
{
this.app.get('/',function(req,res){
res.render('index');
});
}
socketEvents()
{
this.io.on('connection',(socket) => {
socket.on('send message',function(data)
{ …
Run Code Online (Sandbox Code Playgroud) 我只是想用node.js读取一个文件.
我曾经使用这种表示法:
fs.readFile('/etc/passwd', function(err, data) {
if (err) throw err;
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
Node.js的文档提供以下代码:
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别?
我有以下箭头功能
if( rowCheckStatuses.reduce((a, b) => a + b, 0) ){}
rowCheckStatuses
是一个1和0的数组,这个箭头函数将它们全部加起来产生一个数字.此数字用作布尔值,以确定数组中是否至少有一个"1".
问题是,我真的不明白箭头功能是如何工作的,我的IDE认为这是错误的语法,并拒绝检查我的文档的其余部分是否存在语法错误.
我如何将其转换为常规功能以缓解这两个问题?
javascript ×9
ecmascript-6 ×6
node.js ×2
callback ×1
generator ×1
react-native ×1
sockets ×1
typeerror ×1