Nak*_*hon 16 javascript function ecmascript-6 arrow-functions
我想把我的javascript代码"更新"到新的ES6标准,所以我看看现在如何编写函数并在我的全局函数上试用它,在"旧"es5中读取如下所示
function logMessage(message) {
document.getElementById("logs").innerHTML = document.getElementById("logs").innerHTML + `<li class="item-padding"> ${message} </li>`
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我没错,es6的正确"转换"将是这样的:
logMessage = message => {
etc
}
Run Code Online (Sandbox Code Playgroud)
但我的ESLint告诉我,我的logMessage没有定义,我的控制台出错了,我错过了什么吗?我必须在logMessage之前声明var,let或const吗?
我不知道它是否重要,但我也想将这个函数从文件One导出到文件二,并在文件二中的另一个函数中使用函数logMessage,这样做有什么我必须记住的吗?
谢谢你的帮助!
编辑:谢谢大家的答案帮了我很多,我的问题解决了!
Bil*_*oon 23
function logMessage(message) {
// etc...
}
Run Code Online (Sandbox Code Playgroud)
...是函数声明,在es6中仍然完全有效.您正在将函数声明转换为函数表达式,在es5中看起来像这样......
logMessage = function(message) {
// etc...
}
Run Code Online (Sandbox Code Playgroud)
......然后进入es6 ......
logMessage = message => {
// etc
}
Run Code Online (Sandbox Code Playgroud)
...所以l6问题不是由es6语法引入的,而是使用函数表达式,赋值给没有var/let/const的变量是一个全局变量.原始函数声明也存在差异,但函数表达式形式必须在调用之前声明.还有一个不同之处在于es6箭头函数保留了父范围的上下文,因此值得注意的是它们不是100%直接1对于1彼此的映射.
简短的回答,是的,变量需要与声明var/ let/ const为了避免成为全局变量,无论是功能还是不行.
let logMessage = message => {
// etc
}
Run Code Online (Sandbox Code Playgroud)
Que*_*tin 20
现在,如果我没有错,那么es6的正确"转换"将是这样的
你错了.
箭头函数是具有不同行为的新语法.它们不是函数声明和函数表达式的直接替代品(两者都存在于ES6中).
但我的ESLint告诉我,我的logMessage没有定义,我的控制台出错了,我错过了什么吗?我必须在logMessage之前声明var,let或const吗?
是.你正在为变量分配一些东西.您必须先声明变量.
我还想将此函数从文件一导出到文件二
如何定义函数与导出它的能力无关.
| 归档时间: |
|
| 查看次数: |
28749 次 |
| 最近记录: |