前端题目(2)(有坑)
1.
sass和scss的区别
scss是sass的新语法,是兼容css3的
与sass的语法基本相同,只是sass是利用缩进和换行。但是scss是利用 {} 和 ;
2.
选择第奇数个为p的子标签
p:th-child(2n -1)
这里n是从1开始的,任何规则n都是从1开始的
3.
css如何禁止用户选择网页文本
{ user-select: none; }
为鼠标选中的文本设置背景和字体样式
div::selection{
color:red;
background-color:#333;
}
4.
事件流的三个阶段
1.事件捕获阶段 先是父元素触发事件,目标元素也会被触发
2.目标阶段 目标元素事件执行阶段
3.事件冒泡阶段 目标元素触发事件冒泡到父元素
box.addEventListener('click',function(event){},false)
接收的第三个参数,传递布尔类型,如果是false的话,是冒泡(默认就是false),如果是true就是捕获
不是所有的事件都可以冒泡
阻止冒泡的方式 event.stopPropagation()
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
如若有误,请务必指正

浙公网安备 33010602011771号