2017年02月28日
Js是啥

写代码,些功能,最重要的是思路,不同的问题,解决办法有很多种,要多看别人的代码,多总结,同时也要了解更多的js代码概念,这样代码才能越写越少,越来越健壮,可复用。

闭包

演变史:为了减少全局变量,创建了很多局部变量,为了调用局部变量就出现了闭包,闭包多了,就出现了插件,为了 管理插件就出现了前端框架。 可调用其他函数内部的变量、方法 可调用其他函数内部的局部变量

内存泄漏

元素绑定事件,元素销毁,事件还占内存 用事件委托,将事件绑定到父级元素上。

replace :

str.replace(RegExp, function(match, key) { 辅助
    //match: 匹配项,key: 匹配位置
    return 'result'; //返回要替换的内容
});

变量类型判断:

typeof 判断变量所属类型,所以不能区分 Arry, Object, Null;

    // 可以分别出对象的所属的原型,能够区分 Arry, Object, Null
    Object.prototype.toString.call(obj);

call, apply, bind

重点是可以改变当前this所指的上下文, apply 可传入一组变量 bind是绑定,不立即执行

this的指向由其执行域决定,

JS事件委托模式 (利用js的链式调用,prtotype,来实现事件委托)

最初创建的是对象Object; obj = {},定义系列的基础方法和属性, 然后实例化的时候是 A = Object.create(obj), 定义新的属性的同时又可以调用原型obj的属性, 也就是当调用 A中没有的属性时,会通过原型链,去A的原型对象 obj中寻找对应的方法,

相对的是面向对象的编程模式, 最初创建的是方法,function, fun = function(){}, 通过this定义方法和属性, 将基础方法定义到 fun的原型上是避免重复创建,也利用了prototype链式调用,

new 和 create 的区别

new 是 b.proto == a.prototype create 是 b.proto == a

安卓机 reload 刷新不好使

window.location.href = location.href + ‘&time=’+((new Date()).getTime());

js 内容复制到剪切板

function copyToClipboard(id) {
    // 获取复制内容
    var content = document.getElementById(id).innerHTML;

    // 创建元素用于复制
    var aux = document.createElement("input");

    // 设置元素内容
    aux.setAttribute("value", content);

    // 将元素插入页面进行调用
    document.body.appendChild(aux);

    // 复制内容
    aux.select();

    // 将内容复制到剪贴板
    document.execCommand("copy");

    // 删除创建元素
    document.body.removeChild(aux);

    //成功提示
    alert("复制成功!");
}

Arry 原生遍历方法

reduce 参数:回调函数,回函数首次调用的首个参数。 回调函数三个参数,前一项,当前项,当前项索引,

返回值:从左到右开始缩减,最终只有一个返回值

map, filter, forEach 回调函数有三个参数:当前项,当前项索引,遍历的数组

区别:

map 是将回调函数 return 的值作为返回数组的值 filter 则是将执行 return ture 的 当前项 作为返回数组的值 forEach 只遍历处理,没有返回值

some 遍历判断数组中是否存在满足条件的项 存在 停止遍历返回true

return true 可终止遍历

every 遍历判断数组中是否每一项都满足条件 有不满足 停止遍历返回false

return false 终止遍历

lastIndexOf 反向遍历,找最后出现某项的位置 没找到 返回-1(不支持函数) indexOf 正向遍历,找最先出现某项的位置 没找到 返回-1(不支持函数)

移动端浏览器内核

WKWebview内核

页面留存,返回上一页类似页签切换,也就是说返回不会有任何变化,不会重新加载,不是读的缓存

UIWebview内核

页面缓存,返回上一页的时候相当于读取初始状态的缓存,js会执行,但是dom不会变,