保留关键字列表不包含“参数”。应该吗 我不知道如何将“参数”用作标识符。
在JavaScript中(不是TypeScript),有一些类关键字(甚至是实际关键字)不是保留字;细节在这里。arguments
不是关键字,它是传统函数(使用function
关键字的函数)和方法(在类或对象常量中使用方法语法声明)中的隐式声明的绑定(如变量)。这意味着您可以对其进行阴影处理,在尚不存在的上下文中进行声明,等等。
我不知道如何将“参数”用作标识符。
可以,但只能在宽松模式下。这里有些例子:
// Arguments isn't implicitly declared outside traditional
// functions and methods
const arguments = 1;
console.log(arguments); // 1
try {
arguments = 1.5;
} catch (e) {
console.log(e.message); // "Assignment to constant variable." (or similar)
}
const fn = () => {
// Arrow functions don't have an `arguments` identifier declared for them
let arguments = 2;
console.log(arguments); // 2
};
fn();
function fn2() {
if (true) {
// Shadows the function-wide `arguments` only within this block
let arguments = 3;
console.log(arguments); // 3
}
// This uses the implicit `arguments` for the function
console.log(arguments.length); // 0
}
fn2();
在严格模式下无效,在严格模式下对arguments
(和eval
)的使用受到限制。从上面的链接:
名称
arguments
和eval
不是关键字,但是它们在严格模式代码中受到一些限制。参见12.1.1,12.1.3,14.1.2,14.4.1,14.5.1和14.7.1。
这些不同的链接部分放在一起,基本上意味着arguments
(和eval
)不能用作标识符。
不是保留字的其他关键字或类似关键字的内容:
let
并且const
仅是标识符之前的关键字。async
只是function
方法声明之前或之前的关键字。否则,它是可接受的标识符。await
只是async
函数中的关键字。在严格模式下,它是保留字,但在松散模式下,它不是保留字,其他几个也是如此。yield
只是生成器函数中的一个关键字。也以严格模式保留。NaN
,undefined
,Infinity
,和其他人是只读的全局对象的属性,而不是关键字。import
并且export
仅是模块中的关键字。我确定该清单不完整。:-)
这是不断发展的,不断扩展的语言的本质,该语言保持了近100%的向后兼容性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句