0%

全局变量:在函数外部的变量,在浏览器被关闭的时候才会被销毁,比较占内存。

局部变量:在函数内部的变量(未被定义的变量除外)/函数的形参,程序执行完就会被销毁。

作用域链:内部函数访问外部函数会一层一层向外查找。(就近原则)

预解析:js引擎会把js里面的所有var和function提升到当前作用域的最前面

​ 变量提升:把变量的声明提升到当前作用域的最前面,不提升赋值操作

​ 函数提升:把函数的声明提升到当前作用域的最前面,不调用函数

var num=10;
function fn(){
    console.log(num);
    var num=20;
    console.log(num);
}
fn();
//相当于执行以下代码
var num;
function fn(){
    var num;
    console.log(num);//undefined
    num=20;
    console.log(num);//20
}
num=10;
fn();

ES6中var、let、const的区别

const:

这个最简单,只需记住是声明的常量,定义的时候必须声明const的具体值,且之后不允许改变const的值

var和let区别

1、由于js引擎存在预解析,会把var变量名进行提升

对于var来说是这样执行的

var m;

console.log(m);

m=10;

let不存在变量提升,会直接报错

img

2、var是全局变量,可以跨块访问,但不能跨函数访问

let不能跨块访问,也不能跨函数访问

img

img

img

3、var支持修改原来属性的值,并且最后定义的值会覆盖原来的值

let不支持修改原来定义的值

img

4、var是全局变量,会自动添加全局属性window,而let不会

img

img

5、var由于存在变量提升,在变量未赋值的时候是可以用的,不会报错,如果直接输出会输出为undefine

let不存在变量提升,在没有给变量赋值时是不能用的,一但使用会直接报错,这种情况叫暂时性死区

img

img

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

$ hexo new "My New Post"

More info: Writing

Run server

$ hexo server

More info: Server

Generate static files

$ hexo generate

More info: Generating

Deploy to remote sites

$ hexo deploy

More info: Deployment