ES6(二)--变量的解构赋值
解构赋值本质上是一种匹配模式,只要两边的模式相同,那么左边的变量就可以被赋予对应的值
数组的解构赋值
在ES5
中,给多个变量赋值可能是这样
var a = 1, b = 2, c = 3;
//或者这样
var a = 1;
var b = 2;
var c = 3;
解构赋值本质上是一种匹配模式,只要两边的模式相同,那么左边的变量就可以被赋予对应的值
数组的解构赋值
在ES5
中,给多个变量赋值可能是这样
var a = 1, b = 2, c = 3;
//或者这样
var a = 1;
var b = 2;
var c = 3;
let
let
用来声明一个变量
1.let
声明的变量只在所在的代码块里面有效
{
let a = 1;
var b = 2;
}
console.log(a);
console.log(b);
打印a
的时候会报错a is not defined
var arr = [1, 2, 3, 4, 5, 6, 7, 3, 2, 1];
console.log(unique(arr));
function unique(arr) {
var o = {};
for (var i = 0; i < arr.length; i++) {
o[arr[i]] = 1;
}
return Object.keys(o);
}
DOM0级事件
//事件绑定
target.event = function() {}
//事件删除
target.event = null;
DOM2级事件
//事件绑定
target.addEventListener(event,handler,false);
//删除事件
target.removeEventListener(event,handler,false);
function handler() {console.log("123");}
jsonp跨域原理
1.利用script
标签的src
属性来跨域
2.用script
标签加载资源没有跨域问题
一个跨域的例子
百度的搜索关键字就是通过jsonp
跨域获取的
通过请求可以确定百度获取关键字的接口类似于下面这样:https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=6&json=1&p=3&sid=&req=2&bs=b&csor=1&cb=jQuery110207041980424810492_1512634067560&_=1512634067572
ajax实现
var getXmlHttpRequest = function () {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
//低版本的IE浏览器没有提供XMLHttpRequest对象
//所以必须使用IE浏览器的特定实现ActiveXObject
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
var xhr = getXmlHttpRequest();
xhr.open("TYPE", "URL", true);
xhr.send("");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
//数据在xhr.responseText
}
};
readyState
的四种状态
闭包就是能够读取其他函数内部变量的函数
来自阮一峰博客
例如
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
在做一个图片放大功能,给html
加上overflow:hidden
之后发现网页会跳动
原因是hidden
之后,滚动条消失,body
的宽度就会增加。
看了一下知乎的实现,大概就是先计算出滚动条的宽度,当html
加overflow:hidden
的时候,让html
本身向右偏移,偏移的像素就是滚动条的宽度。同理,滚动条出现的时候,取消偏移。
滚动条宽度 = 窗口宽度 - 内容宽度
width = window.innerWidth - document.body.scrollWidth