今日刷题-decodeURI
题目1
1 | 下列正确定义函数的是 |
- 答案
- A
- 解析
- B当中的 ‘Function’ 写错了,应该是 ‘function’
- C当中应该是 var foo = new Function (参数1,参数2,……)
- D同C一样,都是弄错了
题目2
1 | 以下代码执行时不会在控制台输出错误信息的是: |
答案
- B
解析
A: decodeURIComponent(字符串),对字符串进行解码,此时这里传入的字符串应该是使用encodeURI或者是encodeURIComponent编码后的字符串进行解码,直接传入%是一个没有编码的字符串( ‘%’ 编码后为 ‘ %25’ )
encodeURIComponent
和encodeURI
不同的是encodeURIComponent
会对一些特殊字符进行编码而
encodeURI
不会对特殊字符进行编码
B: 函数提升和变量提升同时存在,函数提升优先级 高于 变量提升,所以变量a被函数所覆盖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16console.log(foo);
var foo = 1 //变量提升
console.log(foo)
foo()
function foo(){ //函数提升
console.log('函数')
}
=========等价于=============>
function foo(){ //提到顶端
console.log('函数')
}
var foo
console.log(foo) //输出foo这个函数,因为上面foo没有被赋值,foo还是原来的值
foo = 1; //赋值不会提升,赋值后 foo就不再是函数类型了,而是number类型
console.log(foo) //输出1
foo() //这里会报错,因为foo不是函数了C: 选项需要 .catch去补货 被 reject 的 Promise,才能不抛出错误
D: 选项因为 let 的 TDZ(“暂时性死区”),在 let 的块作用域中无法重复声明,也无法在声明语句之前使用(没有变量提升)。简而言之,在 let 语句出现之前,都是无法使用该变量的(说通俗点就是——只要let所在定义域下(也就是在函数当中的
{ }
当中),在let代码没有执行之前,如果这个时候有一段代码对let声明的变量名称进行了访问并且代码执行了( 比如console.log() ) ,那么就会发生报错!)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30补充一点。这种情况下是可以正常运行的:
var a = 1;
{
//块级作用域
let a = 2;
}
console.log(a);//输出1
也看看下面这种情况
let foo = () => {
console.log(x);//输出x=10;
x++;
}
let x = 10;
foo();
//结合上面说所的,分析下过程
//就是只要let所在定义域下(也就是在函数当中的 `{ }` 当中)
//在let代码没有执行之前
//如果这个时候有一段代码对let声明的变量名称进行了访问
//( 比如console.log() ) ,那么就会发生报错!
//拆解 执行过程
//第一步
let foo = {...};//此时函数并没有执行,所以不存在对let变量进行访问并执行,所以不报错
//第二步
let x = 10;
//第三步
foo();
题目3
1 | 下列代码中,页面打开后能够弹出1的是?(多选) |
- 答案
- A,B,C
- 解析
- A:加载的时候会触发alert(1)代码
- B:img当中的onerror,当图片不存在加载失败的时候会触发,此时这里src=“”,导致加载失败,所以触发alert(1)事件
- C:在ie 7下会连续弹出, IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段Javascript表达式,CSS属性的值等于Javascript表达式计算的结果。在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。
- D:onclick,单击div标签才会触发
1 | 当用户打开一个网页时,想一直停留在当前打开的页面,禁止页面前进和后退,以下正确的是( )(多选) |
答案
- A,D
解析
题目意思
相当于URI当中输入了网站,比如说baidu.com,然后会发现只有后退没有前进按钮的操作,这种情况下从ABCD选
A:window.history.forward( 1 ) (forward不用传递参数,传入也会无效)前进一个页面,这里没办法前进,所以可以选
B:window.history.back( )(back不用传递参数,传入也会无效)后退一个页面,这里可以后退,但是题目要求禁止,所以不选
C:window.history.go(-1) 后退一个页面,这里可以后退,但是题目要求禁止,所以不选
- window.history.go(delta);—-相对于当前页面你要去往历史页面的位置。负值表示向后移动,正值表示向前移动。因此,例如:
history.go(2)
向前移动两页,history.go(-2)
则向后移动两页。如果未向该函数传参或delta
相等于0,则该函数与调用location.reload()
具有相同的效果。
- window.history.go(delta);—-相对于当前页面你要去往历史页面的位置。负值表示向后移动,正值表示向前移动。因此,例如:
D:window.history.forward( -1 ) 前进一个页面,这里没办法前进,所以可以选
题目4
1 | 如何遍历下面的 my_data 对象? |