前端题目(2)(有坑)

1. 

sass和scss的区别

scss是sass的新语法,是兼容css3的

与sass的语法基本相同,只是sass是利用缩进和换行。但是scss是利用 {} 和 ; 
View Code

 

2. 

选择第奇数个为p的子标签

p:th-child(2n -1)

这里n是从1开始的,任何规则n都是从1开始的
View Code

 

3. 

css如何禁止用户选择网页文本

{ user-select: none; }
View Code

为鼠标选中的文本设置背景和字体样式

div::selection{

  color:red;

  background-color:#333;

}
View Code

 

4.

事件流的三个阶段

1.事件捕获阶段      先是父元素触发事件,目标元素也会被触发
2.目标阶段            目标元素事件执行阶段
3.事件冒泡阶段      目标元素触发事件冒泡到父元素
box.addEventListener('click',function(event){},false)
接收的第三个参数,传递布尔类型,如果是false的话,是冒泡(默认就是false),如果是true就是捕获
不是所有的事件都可以冒泡
阻止冒泡的方式 event.stopPropagation()
View Code

 

5.

var a = 0.3
a - 0.1 == 0.2    // false
parseFloat('0' + a , 8) !== 0.3  // false
!!~(a-a)   // false

因为js的计数标准采用的是IEEE754的方式,采用64位来存储浮点数

在这里0.1转化成二进制是无限循环的,存储时,一定会超出范围,一定会舍去一部分,然后在计算过程中可能也会存在超出范围,导致舍入的情况

在parseInt()中接收两个参数,第一个参数就是传值,第二个参数是告诉我们,前面这个数是以几进制的形式传递的

但是在这里parseFloat()中,传递的第二个参数是没有意义的。

最后是按位取反(坑)

 

6. 

 1 var a = 0
 2 ; (function () {
 3         var a = { a: 1 }
 4         var b = function () {
 5             setTimeout(() => {
 6                 console.log(this.a)
 7             },0)
 8       }
 9     b()
10     b.call(a)
11     a = { a: 3 }
12     a.a = 2
13 })()
14                             

setTimeout中this指向的问题,因为setTimeout的执行环境与所在环境是分离的,在非严格模式下this指向window。

所以第一个b执行this指向window, 所以打印的是0

第二个的执行是修改了b函数中的this指向了a,通过这个方式,是可以修改setTimeout的this指向的。

如果是setTimeout.call()这种方式来修改的this,是没有效果的

但是要注意的是setTimeout是一个异步的函数,这个异步函数被放到了异步事件队列中,等到执行栈中的代码执行完了之后才执行。

特别注意:此时a对象已经被传入到setTimeout中了。

11行对a的修改时修改了a的地址,所以是不会对传入的a对象有影响的。这两个a都是不同的地址。

但是如果把11行和12行的代码换一下位置,a.a = 2对a的修改是会作用到setTimeout中的a对象上的,因为此时两个a是指向同一个对象上的。

所以此时打印的是1,如果11行和12行交换位置,打印的就是2

 

7.

1 function foo(){
2 }
3 foo.name = 'kk'
4 console.log(foo.name)
5 console.log(foo.age)
6 foo.age = 123
7 console.log(foo.age)

可以通过  . (点)来给函数添加属性,之前foo上没有age这一属性,所以第5行打印:undefined。第六行又设置了之后,就可以获取了。第七行打印:123

但是name属性是函数上不能更改的,所以即使第3行修改了name属性值,但是第4行还是打印foo

 

如若有误,请务必指正

 

posted @ 2020-08-23 16:03  kkkllo  阅读(152)  评论(0)    收藏  举报