function xxx(a,b,c) {
console.log(arguments.length)
}
xxx(1,2)
console.log('arg:',arguments.length)
第5行代码在控制台运行报错:
Uncaught ReferenceError: arguments is not defined
这点我能理解,符合我的预期结果。
但是,在vscode运行,它居然不报错。
第5行的结果,它报:arg: 5
为什么它不报错的?还有这5是什么来的啊?不可能是arguments.length吧。
刚将第5行代码改为:console.log(arguments)
node.js给我打印了一长串东西,
Node.js与浏览器是不一样的。
的确是不一样的。
Node 中,如果在 package.json 中声明了
"type": "module"
,直接使用arguments
会报错:eferenceError: arguments is not defined
,而且也不能使用__filename
和__dirname
。如果没有声明
"type": "module"
,那就会使用 CommonJS 规范,每个文件都会封装成一个 Module factory(工厂函数)。我没去看规范,但从打印出来的信息来看,exports
require
函数Module
对象,应该就是module
__filename
__dirname
所以整个脚本文件会被封装成这样的形式:
参数变量就是平时写程序时用的所谓的“全局变量”。
实际在 CommonJS 中大概应该是这样的(只是示意,有兴趣自己去找源码看):