执行以下代码,alert的输出结果为hello189

发布时间 2023-11-06 17:06:14作者: 龙陌

执行以下代码,alert的输出结果为 hello189

var msg = 'hello';
for (var i = 0; i<10; i++){    
  var msg = 'hello' + i * 2 + i;
}
alert(msg)

在for循环内使用var声明的变量msg并不是局部变量,而是全局变量。
在for循环中,每循环一次,变量msg的值就被覆盖一次,最终msg的值为表达式‘hello’ + 9 * 2 + 9的返回结果,
根据运算符的优先级,先计算9 * 2,返回结果为18,接着运算hello + 18,返回结果为字符串类型的hello18,
最后运算hello18 + 9,返回结果为字符串类型的hello189,故输出结果为hello189

注意这里只是for循环不是函数,因此for内部定义的msg与for外部定义的msg为在同一块作用域,为同一个变量。

这道题的难点不在域.而是String拼接和符号的优先级.
"hello"+9*2+9    
// "hello"+18+9
// "hello18"+9
// "hello189"       // 结果为String类型字符串