与后端数据交互
循环渲染DOM元素 - 得到json对象数据后,循环插入html中
实现瀑布流效果
实现加载更多的效果
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Documenttitle>
head>
<body style="height: 3000px;">
<h1>1111h1>
body>
<script>
const throttle = function throttle(func, wait) {
if (typeof func !== "function")
throw new TypeError("func must be an function");
if (typeof wait !== "number") wait = 300;
let timer,
previous = 0;
return function proxy(...params) {
let now = +new Date(),
remaining = wait - (now - previous),
self = this,
result;
if (remaining <= 0) {
if (timer) {
clearTimeout(timer);
timer = null;
}
result = func.call(self, ...params);
previous = now;
} else if (!timer) {
timer = setTimeout(() => {
if (timer) {
clearTimeout(timer);
timer = null;
}
result = func.call(self, ...params);
previous = +new Date();
}, remaining);
}
return result;
};
};
function show() {
console.log("111");
}
window.onscroll = throttle(show, 500);
script>
html>
变量 函数—作用域 (域: 某个区域)
作用域(两大类)
var a=10;
function fn(){
// b属于私有作用域
// f1属于私有作用域
console.log(a);
var b=20;
console.log(b);
function f1(){
console.log(b);
}
f1()
}
fn();
console.log(a);
console.log(b);
var a=3;
function fn(){
var b=6;
console.log(a);//3
}
fn();
console.log(b);//b is not defined
node xxx.js
//nodejs 要想运行js代码
//1. 安装nodesjs
//2. 使用"命令提示窗口" node XXX.js
console.log("111");
在私有作用域中,在查找变量的时候,先看自己私有作用域中有没有同名变量
上级作用域有,就用上级作用域的同名变量
如果也没有,一直向上查找,直到找到全局作用域为止
// var a=10;
// function fn(x,y){
// //私有作用域:
// // AO:b,x,y
// var b=100;
// }
// fn(30,40)
function fn(){
console.log(n);//n is not defined
}
fn();
//var n
// function fn(){
// n=3;
// }
// fn();
// console.log(n);//3
// function fn(){
// n=3;//把全局n=2 改为 n=3
// }
// var n=2;
// fn();
// console.log(n);//3
// function fn(){
// console.log(n);//2
// }
// var n=2;
// fn();
// console.log(n);//2
var x=12;
let y=13;
z=14;
console.log(window.x);
console.log(window.y);
console.log(window.z);
console.log(x);
console.log(y);
console.log(z);
全局执行上下文 EC(G)
私有执行上下文
块级作用域 {},除了对象以外
条件1 要是用ES6语法
let
const
const 声明变量
// const a=10;
// a=100;//Assignment to constant variable
//console.log(a);
// const a;
// a=100;//Assignment to constant variable
// const arr=[1,2,3];//arr---0x001
// arr.push(40);//允许
// console.log(arr);//arr---0x001
// arr=[];//不允许
class
条件2 要用花括号包起来
{
let a=10;
}
console.log(a);//a is not defined
全局对象Global Object
,简称GOif判断的结果值,结果值不论是true或false,不会影响变量提升
if判断中,不看判断条件结果为true或false,function都会变量提升,只提升不赋值,跟var一样
只声明不赋值,到执行时才声明,并且该变量是块级变量
(() => {
console.log(a, "|--1--|");//undefined "|--1--|"
if (true) {
console.log(a, "|--2--|");//ƒ a() {} "|--2--|"
a = 6;
console.log(a, "|--3--|");//6 "|--3--|"
function a() {}
//---------------------此时a就为局部作用域
console.log(a, "|--4--|");//6 "|--4--|"
a = 3;
console.log(a, "|--5--|");//3 "|--5--|"
}
console.log(a, "|--6--|");//6 "|--6--|"
})();
// 相当于
(() => {
var a;
console.log(a, "|--1--|");//undefined "|--1--|"
if (true) {
a = function a() {};
console.log(a, "|--2--|");//ƒ a() {} "|--2--|"
a = 6;
console.log(a, "|--3--|");//6 "|--3--|"
//---------------------旧函数所在位置,此时a就为局部作用域
if (true) {
console.log(a, "|--4--|");//6 "|--4--|" //私有作用域里面没有a,所以沿着作用域链往上找a为6
}
if (true) {
let a = 3; //变量a在函数声明后的第一次赋值就是第一次的局部作用域声明
console.log(a, "|--5--|");//3 "|--5--|"
}
}
console.log(a, "|--6--|");//6 "|--6--|"
})();
没有var或function,变量不会做提升
自执行函数本身不会做变量提升
//变量提升
// var 会变量提升 声明变量会提升到最头上,赋值还在原来的地方
// let 没有变量提升
// function 会变量提升 声明和赋值都会提升到最前面
// console.log(a);//undefined
// var a=10;
// console.log(a);//10
// var a;
// console.log(a);//undefined
// a=10;
// console.log(a);//10
// console.log(a);//报错
// let a=10;
// console.log(a);
// console.log(fn);//函数
// function fn(){
// console.log("111");
// }
// console.log(fn);//函数
// function fn(){
// console.log("111");
// }
// console.log(fn);//函数
// console.log(fn);//函数
// var a=2;
// var b=a;
// b=3;
// console.log(b)//3
// console.log(fn(1,2)); //3
// function fn(n,m){
// return n+m;
// }
// console.log(fn(1,2));//3
// 变量提升的特殊性:
// 1. if 判断的结果值(true,false),不会影响变量提升,var 会变量提升
// 2. 新:
// if 判断中,不看判断条件,function 会变量提升,只提升不赋值(跟var一样)
// console.log(a);//undefined
// if(1=="1"){
// console.log(a);//undefined
// var a=2;
// console.log(a);//2
// }
// console.log(a);//2
// console.log(a);//undefined
// if(1=="2"){
// console.log(a);
// var a=2;
// console.log(a);
// }
// console.log(a);//undefined
// console.log(a);//undefined
// if("a" in window){//true
// var a=100;
// }
// console.log(a);//100
// console.log(fn);
// if(1=="2"){
// console.log(fn);
// function fn(){};
// console.log(fn);
// }
// console.log(fn);
// console.log(fn);//undefined
// if(1=="1"){//当条件满足时,function 会再次变量提升+赋值
// console.log(fn); //fn
// function fn(){};
// console.log(fn);//fn
// }
// console.log(fn);//fn
// console.log(fn);//undefined
// if(1=="1"){
// console.log(fn); //fn
// function fn(){};//以函数体为分界线,上面为全局作用域,下面为块级作用域
// fn=3
// console.log(fn);//3
// }
// console.log(fn);//fn
//不会做变量提升
// console.log(a);//报错
// a=10
// console.log(a);
// console.log(a);//报错
// a=function(){}
// console.log(a);
//自执行函数本身不会做变量提升,里面的内容依旧可以做变量提升
//(function(){})()
// // 全局作用域:
// // 全局变量VO(G)/GO:
// // f,g
// f=function(){
// return true;
// };
// g=function(){
// return false;
// };
// ~function(){
// // 私有执行上下文:
// // 私有变量AO(AN):
// // g---undefined
// if(g()&&[]==![]){//undfiend()
// f=function(){return false};
// function g(){
// return true;
// }
// }
// }();
// console.log(f());
// console.log(g());
// // 全局作用域:
// // 全局变量VO(G)/GO:
// // f---true--false,g---false
// f=function(){
// return true;
// };
// g=function(){
// return false;
// };
// ~function(){
// // 私有执行上下文:
// // 私有变量AO(AN):
// // g---undefined---- return true;
// if([]==![]){//满足条件,再次变量提升+赋值
// f=function(){return false};
// function g(){
// return true;
// }
// }
// }();
// console.log(f());
// console.log(g());
//console.log([]==![]) //true
// console.log(![])//false
//console.log([]==false)//true
//[]--->0 false---》0
// console.log(fn);//undefined
// if(1==1){//true 重新变量提升+赋值
// console.log(fn);//函数
// function fn(){
// console.log("ok");
// }
// }
// console.log(fn)//函数
// 变量提升 a---函数--1
//var a=0;
// if(true){//再次 提升+赋值
// a=1;//(全局)
// function a(){}
// a=21;
// console.log(a);//21(块级私有)
// }
// console.log(a);//1
//变量提升 num--und--100 fn---und---函数
// console.log(num);//undefined
// console.log(fn);//undefined
// if([]){//再次 提升+赋值
// // 只要进到当前if条件中,会立即对fn进行赋值;
// fn()//a
// var num=100;
// function fn(){console.log("a")}
// }
// console.log(fn);//函数
// console.log(num);//100
//变量提升 a--und--函数--6
// console.log(a, '1');//undefined 1
// if (true) {// 变量提升+赋值
// console.log(a, '2');//函数,2
// a = 6;
// console.log(a, '3');//6,3
// function a() {}//以它为分界线后面都是私有(块)
// console.log(a, '4');// 私有里面有a吗? 没有 沿着作用域链,往上找 6, 4
// a = 3; //私有的块级作用域,里面有 a---3
// console.log(a, '5');//3,5
// }
// console.log(a, '6');// 6,6