JS-作用域

作用域
1.浏览器在执行js代码的时候,会给js代码分配一个全局对象叫window,对应的这个全局空间就叫全局作用域。
2.私有作用域
函数在执行的时候,浏览器会开辟一个私有空间,叫私有作用域,在私有空间下,分配一个内存模块和一个执行模块。聂村模块先找出所有的var和function把变量存进去,执行模块由上到下逐行执行,再操作不变量的时候,先问自己的私有作用域下查找是否有这个变量,有就看赋值了没有,赋值了就直接使用,没赋值就是undefined,如果没有这个变量,就向该私有作用域的父级作用域查找,有就使用(看赋值了没有,赋值了就直接使用,没赋值就是undefined),如果没有就向父级的父级查找,以此类推直到window,如果window下没有就报错(xxx is not defined)。如果有看赋值了没有,赋值了就直接使用,没有赋值就是undefined。这种查找机制就叫作用域链。
变量提升:
作用域链查找过程中,看一个变量是否在该作用域下存在,存在看赋值了没有,赋值了直接使用,没有赋值就是undefined。这种功能就是变量提升。
函数归属问题:
函数归属于哪一个作用域,跟它在哪一个作用域定义有关,跟它在哪个作用域下执行无关
函数参数问题:
function fn(a);定义函数,如果函数带形参,就相当于内存中的储存了一个变量a。
函数调用时:
先开辟一个私有空间,先把形参存到内存中,如果有实参,给这个变量赋值,如果没带就是undefined,然后再找出代码块中的所有var和function。然后代码从上到下依次执行
形参带默认值,先把形参和值一起存到内存中,带实参调用,就相当于把值进行覆盖
案例
function fn(a=12){//形参
console.log(a)
}
fn()
fn(23//实参)
= 赋值运算(从右往左),就相当于给变量存东西 var a=2;var b={12,56}
== 才是真正的等号
=== 恒等于,既判断数据类型,还判断值 a=3;b="3" a===b
备注:widnow不是js所有的,而是浏览器的一个对象。

posted @ 2019-11-07 15:09  帅帅的你  阅读(120)  评论(0编辑  收藏  举报