Muh*_*mil 11 javascript kotlin typescript
是否可以在 Javascript/Typescript 中创建类似 Kotlin 的作用域函数?有没有图书馆可以做到这一点?
参考: https: //kotlinlang.org/docs/reference/scope-functions.html
不,您不能在 JavaScript 或 TypeScript 中执行此操作。但根据您尝试这样做的原因,解构会有所帮助。
\n您可以得到的最接近的是使用已弃用的with语句,它将一个对象添加到作用域链的顶部,因此任何独立标识符引用都会根据该对象的属性进行检查:
function example(o) {\n with (o) { // deprecated\n console.log(answer);\n }\n}\nconst obj = {\n answer: 42\n};\nexample(obj); // Outputs 42Run Code Online (Sandbox Code Playgroud)\r\n不过,存在几个问题with,这就是为什么它在 JavaScript 的严格变体中是不允许的(这是classES2015+ 中创建的模块、构造和其他新范围内的默认设置,以及带有"use strict";at的任何函数或脚本)开始)。
另一个接近的版本是将对象传递给在其参数列表中使用解构的函数:
\nfunction example({answer}) {\n console.log(answer);\n}\nconst obj = {\n answer: 42\n};\nexample(obj); // Outputs 42Run Code Online (Sandbox Code Playgroud)\r\n但一个主要的警告是,您不能以这种方式为属性分配新值(更糟糕的是,如果您尝试使用 \xc2\xa0\xe2\x80\x94 为例,使用answer = 67\xc2\xa0\xe2\x80\x94它更新参数的值,但不更新对象的属性值)。
为了解决这个问题,您可以在函数内部使用解构,这样const您就不会忘记您无法更新该值(或者如果您尝试的话会收到早期错误):
function example(o) {\n const {answer} = o;\n console.log(answer);\n // answer = 67; // <== Would cause error\n // o.answer = 67; // <== Would work\n}\nconst obj = {\n answer: 42\n};\nexample(obj); // Outputs 42Run Code Online (Sandbox Code Playgroud)\r\n| 归档时间: |
|
| 查看次数: |
5708 次 |
| 最近记录: |