js高级知识小结(五)

一.预解析:
在当前作用域下,js运行之前,会把带有var和function关键字的事先声明,并在内存中安排好。
然后再从上到下执行js语句。预解析只会发生在通过var定义的变量和function上。

var声明变量:
console.log(num); // undefined
var num=100;// 分为两部分: 声明(在运行之前就会声明) 初始化(赋值)
var 这里声明了全局变量, 并且var 声明的变量的 会预解析(在运行之前, 会直接在内存中占用位置)
console.log(num);// 100

function声明的函数:
test(); // test函数
function test(){
console.log(‘test函数’);
}
test(); // test函数

二.由此出现的问题:var 声明的变量和 function声明的函数 在预解析的区别?
得出的结论: var 声明变量时 并没有同时定义(初始化赋值)
而function 声明的函数 在预解析时 会同时定义

三.作用域链:
只有函数可以制造作用域结构,那么只要是代码,就至少有一个作用域, 即全局作用域。

凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。

        将这样的所有的作用域列出来,可以有一个结构: 函数内指向函数外的链式结构。就称作作用域链


        注意:在JavaScript中, 作用域为可访问变量,对象,函数的集合。

四.全局变量和局部变量:
局部变量:函数体内var 声明的变量就是局部变量;
全局变量:在所有函数体外声明的变量就为全局变量;

五.JavaScript变量生命周期:

JavaScript变量生命周期在它声明时初始化。

                     局部变量在函数执行完毕后销毁。

全局变量在页面关闭后销毁。

六.变量的访问规则:
首先看变量在第几条链上, 在该链上看是否有变量的定义与赋值, 如果有直接使用

              如果没有到上一级链上找( n - 1 级链 ), 如果有直接用, 停止继续查找.

              如果还没有再次往上刚找... 直到全局链( 0 级 ), 还没有就是 is not defined

              注意,同级的链不可混合查找

,
必须是局部变量:保证了数据安全,减少命名的冲突

七:闭包:
闭包是指有权限访问另一个函数作用域中的变量的函数。
JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大

八:闭包的应用:
闭包可以使用在许多地方.它的最大作用有两处,一个是前面提到的可以读取函数内部的变量,
另一个就是让这些变量的值始终保持在内存中
添加括号 直接调用 上一级函数
不添加括号 需要接受 在调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值