1.以下代码执行的结果
1 2 3 4 5 |
|
0,1,2
1,2,3
3,3,3
0,0,0
解析:每次for循环的时候setTimeout都会执行,因为setTimeout是异步函数,里面的function则不会立即执行,而是会被放入任务队列,因此放了3次;for循环的3次执行完之后,,i变为3,也就是每次循环,i都会被后一个i值覆盖,然后全部执行任务队列中的函数,所以就是输出3个3。
2.以下代码执行后,console 输出的信息是?
1 2 3 |
|
1 2 3 4 5
0 1 2 3 4
4 4 4 4 4
5 5 5 5 5
解析:requestAnimationFrame虽然是异步函数,但是由于i是用let定义的,每一次都会生成一个块级作用域,来把当前值和requestAnimationFrame放在这个作用域中 选A
3.执行以下代码,其实现的效果为()
1 2 3 4 5 6 7 8 9 10 11 12 |
|
鼠标单击button1后将button1链接到button2的后面
鼠标单击button1后将button1移动到button2的后面
鼠标单击button1后将button2移动到button1的后面
鼠标单击button1后将button2链接到button1的后面
解析:只有我们清楚appendChild() 方法可向节点的子节点列表的末尾添加新的子节点即可。
4.执行以下程序,输出结果为()
1 2 3 4 5 6 7 8 9 10 |
|
1
2
undefined
抛出异常
解析:函数解析优先变量解析:所以提升就是声明(变量/函数)提至当前作用域的最顶部,赋值语句留在原地,代码如下
//原来的代码
var a = 2;
function fn(){b();return ;var a = 1;function b(){console.log(a);}
}
fn();//实际上的代码
var a = 2;
function fn(){function b(){console.log(a);}var a //变量声明提升,默认赋值为undefinedb(); //执行函数b,在当前作用域找到a,值为undefinedreturn;//return后面的语句不再执行,a没有被赋值为1a = 1; //在原来的位置才会赋值,但不会执行到这里
}
fn();
5.依据以下JS代码,在位置A打印变量a与在位置B打印变量a各会有怎样的输出?
1 2 3 4 5 6 7 |
|
1、class a {}
报错、class a {}
报错、报错
1、报错
解析:class和let一样都有暂时性死区,在被声明前无法访问
也就是在当前作用域能找到,但是要在声明后才能访问
es6中的class和let const一样都不存在提升
(实际存在提升,只是因为TDZ的作用,并不会像var那样得到undefined,而是直接抛出错误)
原来的代码
var a = 1;
function test(){//console.log(a) 位置A
class a {}// console.log(a) 位置B
}
test();实际上提升后的
var a = 1;
function test(){console.log(a) 位置A //在test()作用域内找得到a
//是一个class但是存在TDZ暂时性死区,访问报错class a {}console.log(a) 位置B //a已经声明创建出来了
}
test()
本文发布于:2024-02-04 07:27:42,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170702027853548.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |