与后端数据交互
循环渲染DOM元素 - 得到json对象数据后,循环插入html中
实现瀑布流效果
实现加载更多的效果
Document 1111
变量 函数—作用域 (域: 某个区域)
作用域(两大类)
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