一、今日所学内容
1、执行环境、变量对象、作用域
(1)概念:
标识符:变量名、函数名、形参、对象的键名,统称为标识符
作用域:标识符可以被访问的范围,就是作用域
执行环境:代码的运行环境,js有两种执行环境:全局执行环境与函数执行环境
js执行环境,都会被放入一个栈中
作用域链:提供了一套标识符访问的规则,保证标识符有序访问。访问标识符的时候,里面没有可以往外面找,层层往外找,直到window,找到了就停止,找不到就报错
(2)作用域的分类
全局作用域
函数作用域(局部作用域)
块级作用域(ES6新增)
2、剩余参数
(1)主要起作用的是三个点;rest仅为数组名,任意的单词都可以
3、函数的返回值
fn()
fn().fn():先执行外面大的fn(),再执行里面小的fn()
fn()[0].fn()
fn()()
4、函数的调用
直接调用:函数名();
作为对象的方法调用:对象名.方法名();
回调函数:定时器,数组的方法,其他的方法—————自动执行
自己调用自己:立即执行函数表达式
5、立即执行函数
(1)写法:
;(function(形参){
js代码
})();
(2)a挂载在window上,成为全局标识符
js中如果全局标识符过多,称为全局污染
比较容易和其他同事的代码冲突
6、箭头函数
可以省略的情况
参数有且只有一个:可以省略小括号
只有一句代码:可以省略花括号,并且同时省略return,自动return
7、闭包
(1)跨作用域访问变量,形成闭包,闭包是一种作用域的体现
(2)常见的闭包写法:
父函数嵌套子函数,子函数访问父函数的变量,把子函数返回或挂载在window上
(3)闭包的作用
实现早期的模块化开发,把所有的变量隐藏在内部,对外暴露了统一的访问接口
(4)优点:隐藏变量,避免全局污染
(5)缺点:一旦形成闭包,$变量就不会被内存释放,内存开销大,可能会造成内存泄漏,不建议过多使用
(6)js有垃圾回收机制,不会被垃圾回收机制销毁
|