解析过程和变量提升
解析:在代码执行前会有代码的解析
consloe.log(web);
var web = 'pikasu';
`输出结果是:undfined`
因为解析的变量提升是后是
var web;//变量提升
consloe.log(web);
web = 'pikasu';
`所以输出结果是:undfined`
let&const暂时性死区TDC
let&const声明的变量必须放在使用之前
let web = "pikasu1";
funciton func(){
consloe.log(web);
let web = "pikasu";
}
//这样就会报错
let web = "pikasu1";
funciton func(){
let web = "pikasu";//正确写法:放在使用之前
consloe.log(web);
}
var-let-const的共同点
var web ="pikasu"//公共的
function show(){
var web = "皮卡苏"//私有的
consloe.log(web);//输出函数内定义的(皮卡苏)
}
show();
consloe.log(web);//输出公共的(pikasu)
//在函数内声明web就是在块作用域下的私有的变量
//输出结果是:皮卡苏 pikasu
//var-let-const声明的都是同理
全局污染
web ="皮卡苏"//不声明容易污染全局
consloe.log(web);
//解决方法:开启严格模式
"use strict";
web ="皮卡苏"
consloe.log(web);//此时输出就报错了
块作用域 var是没有块作用域的
var i = 99;//这个全局变量i此时被下面for循环里的i影响了
for(var i = 0;i<5;i++){
consloe.log(i);
}
consloe.log(i);//输出的是5
var i = 99;//解决方法:将for里的var改成let或const就行了
for(let i = 0;i<5;i++){
consloe.log(i);
}
consloe.log(i);//输出的是99
const常量声明一探究竟
const web = "pikasu";
web = "111";
//此时会报错因为在同一作用域下是改变不了的
window全局对象污染和重复声明
var screenLeft = 88;
console.log(window.screenLeft);
//此时输出的不是window对象的数值而是var设置的对象数值88
//解决方法:改成let来声明变量
let screenLeft = 88;
console.log(window.screenLeft);//这里输出的是window对象的数值(浏览器到左边的距离)
console.log(screenLeft);//这里是输出的88
Object.freeze冻结变量
const Host={
url:"https://www.jpymw.cn/",//使用分号因为是变量
port:443
};
Object.freeze(HOST);//使用Object.freeze即可冻结变量,变量不可更改!
HOST.port=80;
console.log(HOST);//此时输出的是443
标量与引用类型的传值与传址特性
基本量传值,对象传值 基本量是复制一份内存 对象是指向同一块内存,改变了是一起改变的
null与undefined详解
没有值就是undefined
use strict严格模式高质量代码守卫 use strict的作用域是当前往下的 比如在函数内开启不会影响外面的,如果函数里还有函数那么也会影响 开启严格模式不声明变量是会报错的
赋值运算符与算术运算符
let a=1,
b= 2;//赋值运算符 把2赋值给b了
a += 5;//算术运算符 a = a + 5
一元运算符的前置与后置操作
let n = 1;
++n; //前置
n++;//不写表达式的话都等于 n = n+1;
let f = 2;
let d = f + ++n; // 如果是后加 n++ 那么先算全面的f + n 再++就是(+1)
consle.log(d);//++n此时输出的是4 因为n+1 后,f + n ;
//n++ 的话输出就是3