小问题笔记

  • 深拷贝,浅拷贝

此问题针对于引用类型
浅拷贝,拷贝(地址)完后,改变任意对象的值后,均改变
深拷贝,拷贝完后,与前对象无关
实现深拷贝:

  1. 开辟新的栈空间复制
  2. json序列化和反序列化后

  • XSS和CSRF

跨站脚本攻击,跨站请求伪造
前者通过在前后端对输入部分的内容进行验证过滤,并且对特殊字符进行编码
后者通过增加动态验证(二次验证),以及对cookies进行删除


  • 双向数据绑定的原理和SPA路由原理
  • 通过Object.defineProperty()实现监控数据,准确的发送变更位置给视图
  • 通过window.onhashchange事件监听url的#变化,H5新增的history api
    A)history.pushState(data, title [, url]):往历史记录堆栈顶部添加一条记录; data会在onpopstate事件触发时作为
    参数传递过去;title为页面标题,当前所有浏览器都会 忽略此参数;url为页面地址,可选,缺省为当前页地址;
    B)history.replaceState(data, title [, url]) :更改当前的历史记录,参数同上;
    C)history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样;
    D)window.onpopstate:响应pushState或replaceState的调用;

http://www.cnblogs.com/bigbearbb/p/4261017.html


  • 高效化递归函数

将需要多次计算的值,利用数组将其保存下来【记忆函数】
callee和caller
arguments.callee:指向参数arguments对象的函数【有利于匿名函数的递归和封装】
functionName.caller:指向当前函数的直接父函数

console.time(4)
let fibonacci3 = function(){
    let memo = [0,1] ;
    let fib = function(n){
        let result=memo[n] ;
        if(typeof result!=='number'){
            result=arguments.callee(n-1) + arguments.callee(n-2) ;
            memo[n]=result ;
        }
        return result ;
    };
    return fib ;
}();
console.log(fibonacci3(102));
console.timeEnd(4)

  • React、Vue、Angular

http://36kr.com/p/5085661.html


  • call和apply

object[.functionname].call(obj,arg1,arg2,...)
object[.functionname].apply(obj,[arg1,arg2,...])
作用均是使Object中的作用域变成obj的,即改变this的作用域


  • 事件流和事件委托

事件流:捕获阶段、执行阶段、冒泡阶段
捕获为由外向内触发
冒泡为由内向外触发
addEventListener() 第三个参数为bool false为冒泡阶段
stopPropagation()、stopImmediatePropagation()可阻止事件流的后续传播。
事件委托就是父元素监听子元素的冒泡事件
$('元素').on( events [, selector ] [, data ], handler )

  • promise

promise对象是一个对未来结果的一个承诺
var promise = new promise(function(resolve,reject){})实例化
resolve(data) 代表成功时返回的值
reject(data) 代表失败时返回的值
和promise.resolve()/reject效果一致
同时还有其他方法如all()等
promise的状态有三:
pending初始状态,fulfilled成功,rejected失败
改变状态后不可更改

你可能感兴趣的:(小问题笔记)