JavaScript代码报错SyntaxError: Unexpected identifier at createScript求解决
JavaScript SyntaxError 排查:返回参数两倍值数组的错误原因
问题重现
你编写的这段代码目标是返回包含所有参数两倍值的数组,但运行时抛出了语法错误:
Error: SyntaxError: Unexpected identifier at createScript (vm.js:53:10) at Object.runInThisContext (vm.js:95:10)
对应的代码如下:
function multiplyByTwo(a,b,c){ // 定义变量i和数组ar var i,ar=[]; // for循环遍历0-2,将每个参数乘以2 for(int i=0;i<3;i++){ // 遵循数组索引规则,依次存入对应参数的两倍值 ar[i]=arguments[i]*2; } return ar; } var result=multiplyByTwo(1,2,3);
错误原因分析
这是一个典型的语法错误:你在for循环初始化时使用了int i=0,但JavaScript是弱类型语言,不需要像Java、C++这类强类型语言那样声明变量的类型!
你已经在函数开头用var i声明过变量i了,就算没有提前声明,在for循环里也应该用var(ES5及更早版本)或者let(ES6+)来声明变量,而非int这个强类型语言的关键字。JavaScript引擎无法识别int,因此直接抛出了语法错误。
修正后的代码
这里提供几种修正方案,适配不同的代码风格:
方案1:复用已声明的变量i
既然已经在函数开头用var i声明过变量,for循环里直接初始化即可:
function multiplyByTwo(a,b,c){ // 定义变量i和数组ar var i,ar=[]; // for循环遍历0-2,将每个参数乘以2 for(i=0;i<3;i++){ // 遵循数组索引规则,依次存入对应参数的两倍值 ar[i]=arguments[i]*2; } return ar; } var result=multiplyByTwo(1,2,3); console.log(result); // 输出 [2,4,6]
方案2:用let在循环内声明变量(推荐ES6+写法)
现代JavaScript环境更推荐用let在循环内声明变量,避免变量提升带来的潜在问题:
function multiplyByTwo(a,b,c){ const ar=[]; for(let i=0;i<3;i++){ ar[i]=arguments[i]*2; } return ar; } var result=multiplyByTwo(1,2,3); console.log(result); // 输出 [2,4,6]
方案3:更灵活的通用写法(适配任意数量参数)
如果想让函数支持任意数量的输入参数,可以直接把arguments转为数组处理:
function multiplyByTwo(){ return Array.from(arguments, num => num * 2); } var result=multiplyByTwo(1,2,3,4); console.log(result); // 输出 [2,4,6,8]
内容的提问来源于stack exchange,提问作者akotch
相关产品推荐
相关产品推荐

