首页 > 试题广场 >

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

[单选题]
执行以下代码,alert的输出结果为()
var msg = 'hello';
for (var i = 0; i<10; i++){
    var msg = 'hello' + i * 2 + i;
}
alert(msg);



  • hello
  • hello189
  • hello30
  • hello27
字符串链接
发表于 2016-06-24 13:12:28 回复(0)
这个不是变量提升吗,编译器在解析的时候,会发现声明了两个变量,但是后面的那个发现前面的已经声明了所以被忽略。所以for循环中的msg的声明其实是无效的,从头至尾都是在操作同一个msg。
发表于 2016-06-01 21:55:19 回复(3)
注意这里只是for循环不是函数,因此for内部定义的msg与for外部定义的msg为在同一块作用域,为同一个变量。
发表于 2016-04-10 22:02:04 回复(6)
var msg='hello'; //声明变量
for (var i=0; i<10; i++)
 { 
   var msg='hello'+i*2+i;   //后续声明msg:重复变量声明在JavaScript中是合法且无害的,JavaScript会自动忽略同一变量的后续声明
 }
 alert(msg);  //javascript中无块级作用域。所以msg是for循环中最后一个,i=9的时候。msg='hello'+18+9即:hello189
发表于 2018-08-11 12:22:23 回复(0)
1.字符串拼接 2.for循环里面是9,跳出for循环后才是10
发表于 2017-03-14 10:26:11 回复(0)
知道答案是hello+数字,但是为什么是189?
发表于 2015-05-22 22:14:27 回复(1)
js可以重复定义变量吗,反正测试的结果是B
发表于 2015-04-13 17:31:26 回复(0)
A
循环之内的msg变量的作用范围只有循环内部,除了循环之后就不会存在了。
发表于 2015-04-13 14:03:28 回复(2)
这道题的难点不在域.而是String拼接和符号的优先级.
"hello"+9*2+9    
// "hello"+18+9
// "hello18"+9
// "hello189"       // 结果为String类型字符串
发表于 2018-04-19 22:05:38 回复(8)
javascript只有函数域,没有块作用域的概念,所以在同一个作用域中同一个变量声明多次还是第一次声明那个!
发表于 2015-09-25 16:37:12 回复(11)
输出hello189       hello+9*2+9
发表于 2015-06-09 19:39:54 回复(9)
我觉得这道题的关键是:
每执行一次for循环,var msg='hello'+i*2+i; 都会执行一次这句代码,也就是将变量msg重新定义赋值一次
对于变量msg后面的赋值操作会覆盖前面的赋值操作
所以msg变量只会保留最后一次的赋值,即当i=9时的赋值结果
发表于 2018-07-21 17:02:44 回复(2)
变量名提升,导致循环里每次都是在对msg进行赋值操作,所以只能得到最后一次赋值的结果,然后是字符串的拼接,因为第一个是字符串,后面的数字也就转换为字符串,所以+执行的是拼接操作
发表于 2016-07-22 07:13:41 回复(1)
字符串+数字时,数字会转换成字符串进行连接

For不会形成作用于

同一个变量可以var定义多次
发表于 2015-05-02 20:25:20 回复(0)
考点一:作用域
作用域有全局作用域和局部作用域:
在for循环里用let声明的变量是局部的(即块级作用域),
在for循环里用var声明的变量是全局的,故for循环里的msg会覆盖for循环外面的msg,
最后msg的值是for循环里的值 "hello"+9*2+9

考点二:加减算术运算符  都是从左到右依次计算的
例一:"hello"+9*2+9  从左到右运算是:
第一步: "hello18"+9
第二步: "hello189"

例二:"hello"+4-7  从左到右运算是:
第一步: "hello4"-7
第二步: NaN

例三:3+4+"hello" -2+1 从左到右运算是:
第一步: 7+"hello"-2+1
第二步: "7hello"-2+1
第三步:NaN

例四:3-4+"hello" -2+1 从左到右运算是:
第一步: -1+"hello"-2+1
第二步: "-1hello"-2+1
第三步:NaN

编辑于 2021-12-31 17:02:20 回复(0)
计算值从左右往算。因此先进行‘hello’+18,转换成字符串形式,再加9仍是字符串。若是18+9+‘hello’则是27hello,会先进行数字相加。
发表于 2020-02-21 15:46:59 回复(0)
这题主要需要注意两点:for 循环里面的 msg 是重新定义,而非赋值。其次,在字符串中, ‘+’ 是拼接字符串而不是计算。
发表于 2022-02-21 14:10:21 回复(0)
我干绝我已近被变量提神,给搞魔怔了 我一上来就感觉这个i 应该等于10  未啥这里不等于10 啊
发表于 2019-07-31 00:07:04 回复(1)
1.局部变量只在函数内部声明,其他地方都是全局变量;
2.计算从左向右,字符串+数字=>字符串;
发表于 2017-09-04 16:34:08 回复(0)
为啥这次不是吧i循环执行完在执行括号内的 为啥不是i等于10
发表于 2022-01-20 11:07:56 回复(1)