一问就想不起来的问题,来看看?

180 阅读5分钟

1.js默认阻止时间冒泡的事件:

    1) event.stopPropagation()
       阻止事件冒泡的方法,不让时间向document上蔓延,但是默认事件仍然会执行
    2) event.preventDefault()
        阻止默认事件的方法
    3) return false;
        会同时阻止事件冒泡也会阻止默认事件

2.逻辑代码,可以自己打印输出看看哦,答案在评论处

var a = [1,2];
var b = a.concat([3,4,[5,6]]);
1、请问数组b的长度是几?

var data = [];
for(var i = 0;i<3;i++){ 
    data[i] = function(){
        console.log(i);
    }
}
2、请问data[0] = ?
    data[1] = ?
    data[2] = ?

var z = 10;
function foo(){
    console.log(z);
}
(function(funArg){
    var z = 20;
    funArg();
})(foo)
console.log(z); //3、z=?

function fact (num){ 
    if(num<=1){ 
	return 1
    }else{
	return num*arguments.callee(num-1)
    }
}
var anotherFact = fact;
fact =null
console.log(anotherFact(4));//4、(anotherFact(4)?

3.这里遇到了一个我这个小白看不懂的地方:arguments.callee

  • 首先,arguments是什么?
  • arguments是函数调用时,创建的一个类似的数组但又不是数组的对象,并且它存储的是实际传递给函数的参数,并不局限于函数声明的参数列表。
    1. arguments.callee是指向参数arguments对象的函数,获取当前函数的主体,在哪个函数中运行,就代表哪个函数,一般用于匿名函数中。
    所以这里的arguments.callee是实现计算阶乘函数的递归算法,但是访问 arguments 是个很昂贵的操作,因为它是个很大的对象,每次递归调用时都需要重新创建。影响现代浏览器的性能,还会影响闭包,谨慎使用。

    4、call和Apply的区别:

    • 每个函数都包含非继承而来的方法:call()和apply()
    • 定义:
      • apply:调用一个对象的一个方法,用另一个对象替换当前对象。

      • call:调用一个对象的一个方法,用另一个对象替换当前对象。

    • 相同点:
      • 都是在特定的作用域中调用函数,等于设置函数体内的this对象的值,以扩充函数运行的作用域
    • 区别:
      • apply():最多只能有两个参数:函数运行的this对象和参数数组。
        • 如果argArray不是一个有效数组或不是arguments对象,那么将导致一个
          TypeError,如果没有提供argArray和thisObj任何一个参数,那么Global对象将用作thisObj。

          语法:apply([thisObj [,argArray] ]);
    

      • call():第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。
        • call方法可以用来代替另一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象,如果没有提供thisObj参数,那么Global对象被用于thisObj。

          语法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);
    

    5.浏览器的事件流:


    1. 事件冒泡
      1. 事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点
    2. 事件捕获
      1. 事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预定目标之前就捕获它
    3. DOM事件流
      1. 处于捕获阶段往事件冒泡阶段之间

    6、提高web页面性能

    • 减少http请求:
      • 图片加载也会产品http请求,所以建议尽量减少使用网络图片,如果图片比较多, 可以使用字体图标
    • 使用CDN地址:
      •  CDN(内容发布网络)是一组分布在多个不同地理位置的Web服务器,用于更加有效地向用户发布内容。在优化性能时,向特定用户发布内容的服务器的选择基于对网络慕课拥堵的测量。
      • CDN还可以进行数据备份、扩展存储能力,进行缓存,同时有助于缓和Web流量峰值压力。
    • 将样式表放在头部
      • 减少页面首屏出现的时间,使页面内容逐步呈现,改善用户体验,防止“白屏”。能够尽快显示内容,为用户提供可视化的回馈,这对网速慢的用户来说是很重要的
    • 将脚本放在底部
      • 和样式表相同,放在底部会减少首屏出现的时间。js的下载和执行会阻塞Dom树的构建(严谨地说是中断了Dom树的更新),所以script标签放在首屏范围内的HTML代码段里会截断首屏的内容
    • 避免CSS表达式
      • CSS表达式是动态设置CSS属性的一种强大并且危险的方式,它受到了IE5以及之后版本、IE8之前版本的支持。
    • 使用外部JavaScript和CSS
      • 内联脚本或者样式可以减少HTTP请求,按理来说可以提高页面加载的速度。然而在实际情况中,当脚本或者样式是从外部引入的文件,浏览器就有可能缓存它们,从而在以后加载的时候能够直接使用缓存,而HTML文档的大小减小,从而提高加载速度。
    7.HTTPS和HTTP的区别:
    • 定义:
      • https:是以安全为目标的HTTP的通道,简单讲是HTTP的安全版。HTTPS的安全是以SSL为基础,因此加密的详细内容就需要SSL。
      • http:超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
    • 区别:
      • https:https协议需要到ca申请证书,一般免费证书很少,需要交费。https 则是具有安全性的ssl加密传输协议。
      • http:http是超文本传输协议,信息是明文传输。