有几个类似关键字的东西(甚至是实际的关键字)在 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();Run Code Online (Sandbox Code Playgroud)
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只是标识符之前的关键字。asyncfunction仅是方法声明之前或之前的关键字。否则,它是一个可接受的标识符。await只是async函数中的一个关键字。它在严格模式下是保留字,但在松散模式下则不然,其他几个模式也是如此。yield只是生成器函数中的一个关键字。在严格模式下也保留。NaN、undefined、Infinity和其他是全局对象的只读属性,而不是关键字。import和export仅仅是模块中的关键字。我确信该列表不完整。:-)
这是一种不断发展、扩展的语言的本质,它保持着近 100% 的向后兼容性。
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |