面试题1

说出页面传值的方式?
1. 使用window.open与opener  实现子父窗口的传值;
2. url地址传值  http://baidu.com?uanme=abc&&upwd=abc123
3. session页面之间传递值
4. sql也能实现页面之间传值,a页面插入数据库,b页面去读数据
HTMLCollection和NodeList的共同
都是类数组对象,都有length属性
都有共同的方法:item,可以通过item(index)或者item(id)来访问返回结果中的元素
都是实时变动的(live),document上的更改会反映到相关对象上
(例外:document.querySelectorAll返回的NodeList不是实时的)
HTMLCollection和NodeList的区别
NodeList可以包含任何节点类型,HTMLCollection只包含元素节点(elementNode),
elementNode就是HTML中的标签
HTMLCollection比NodeList多一项方法:namedItem,可以通过传递id或name属性来获取节点信息


document.getElementsByName 返回 NodeList
document.getElementsByTagName 返回HTMLCollection

NodeList 是一个历史遗留问题,当初为xml而设计;
总结get和post区别—面试用

get参数通过url传递,post放在request body中。
get请求在url中传递的参数是有长度限制的,而post没有。
get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
get请求只能进行url编码,而post支持多种编码方式
get请求会浏览器主动cache,而post支持多种编码方式。

get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

(据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。)

ajax的同步与异步

1.浏览器软件 本身多进程,多线程
2. 但是单个页面是 单线程,只能是从往下执行
3. 同步会在页面中造成阻塞,等当做步骤执行完成后,才能执行下一个步骤;

异步:可以解决并发,多个任务一起执行.无需等待结果.(回调函数,Promise,async await)

请说说 bind和call,apply的区别?
 都是this的指向更改方法.
 
 bind(): 作用改变函数的 this,但是bind不会立即执行
        它是在函数名称的后面+ bind(改变的对象)a

 call(): 作用也是改变函数的this,立即执行.
        call函数里的参数,第一个就是要改变的this对象,后面就是对应参数

apply(): 作用也是改变函数的this,立即执行.与call一样
       apply 只有2个参数,第一个参数修改this的指向
       第二参数,是一个数组;
定义模式
    PubSub = {
        // 有一个斗鱼平台
        douYu : {},
        //某粉丝fn 关注了某主播key
        addLiten : function(key, fn){
            //判断斗鱼有没有某某主播
            if(!this.douYu[key]){
                  this.douYu[key] = [];// 新主播key ,新粉丝团 [] 
            }
            
            this.douYu[key].push(fn);

        },
        //上线通知. 某某主播,通知某某主播的粉丝
        trigger : function(key){
            var list = this.douYu[key];//得到某主播的 粉丝团
            for(var i = 0; i < list.length; i++){
                list[i].call();
            }
        },
        
        //取消 ,某粉丝取消某某主播的关注
        off : function(key, fn){
            if(arguments.length==1){
                delete(this.douYu[key])
            }
            if(this.douYu[key]){

                for(var i = 0; i < this.douYu[key].length; i++){
                    if(this.douYu[key][i] == fn){
                        //delete(this.douYu[key][i])
                        this.douYu[key].splice(i, 1);
                    }
                }
            }
        }
    }
    
    // 关注 ftm 冯提莫
     function fs1(){
         console.log("周杰伦");
     }
    PubSub.addLiten("冯提莫",fs1)

    //粉丝2号
    function fs2(){
        console.log("陆超..真好");
    }
    PubSub.addLiten("冯提莫",fs2);

    //粉丝3号
    function fs3(){
        console.log("陆灯..真好");
    }
    PubSub.addLiten("冯提莫",fs3);
    
    //粉丝4号
    function fs4(){
        console.log("B超..真好");
    }
    PubSub.addLiten("冯提莫",fs4);

    //取消关注
    PubSub.off("冯提莫",fs3);

    //冯提莫上线
    PubSub.trigger("冯提莫");

jQuery.extend 和jQuery.fn 有什么区别?

 jQuery.extend全局方法(为扩展工具而诞生 $.each,$.ajax)
 jQuery.fn.extend 为扩展插件而诞生

 jQuery.extend ==jQuery.fn.extend
 jQuery.fn = jQuery.prototype
 jQuery.prototype.extend

 都是往jQuery的原型添加方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值