函数内部计算的是局部变量的形参i,不影响全局的变量i

以下哪些代码执行后i的值为10:

A
let i =1 + {
valueOf() { return 9; }
};

B
let i = 0;
new Array(10).forEach(() => {
i++;
});

C
let i = parseInt('0xA');

D
let i = 5;
function a(i) {
i *= 2;
}
a(i);

正确答案:AC

B选项输出值为0是因为forEach方法在数组元素为空时会跳过执行回调函数,相当于此选项回调函数并未执行,所以还是输出0
forEach会忽略掉 [empty,....]

c选项,是十六进制解析 parseInt("ff",16) parseInt("0xff") 效果一样

D阴就阴在形参也是i,和有没有返回值没有关系,函数内部计算的是局部变量的形参i,不影响全局的变量i

A:
如果在需要使用原始值的上下文中使用了对象,就会自动调用valueOf方法.这里重写了默认的valueOf 方法。

所以相当于 let i = 1+9

B:

forEach方法按升序为数组中含有效值的每一项执行一次 callback函数,那些未初始化的项将被跳过。

new Array(10)创建的数组默认值都是undefined,所以回调函数都会被跳过。

C:

**在没有指定基数的情况下,如果字符串以"0x"或者"0X"开头, 则基数是16 (16进制)。 **

相当于let i = parseInt('0xA',16)

D:

i是形参,,属于局部变量,不影响全局变量i的值

posted @ 2023-11-10 18:41  龙陌  阅读(25)  评论(0)    收藏  举报