javaScript的模块介绍 ,ES6模块,作用域和作用域链,

目录

什么是模块化

不使用模块化会造成什么

模块的加载

ES6模块

​ES6 的模块自动采用严格模式

什么是作用域

作用域分为全局和局部作用域 

作用域链

闭包

 闭包的作用


 

什么是模块化

遵守CommonJS固定的规则,把大文件拆分成独立并相互依赖的小模块
好处有:
可以提高代码复用性
可以提高代码可维护性
可以实现按需加载

不使用模块化会造成什么

不使用模块化, 多人协作开发,会造成变量污染

模块的加载

require导入  module.exports 导出

ES6模块

ES6模块完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

​ES6 的模块自动采用严格模式

严格模式主要有以下限制。
变量必须声明后再使用
函数的参数不能有同名属性,否则报错
不能使用with语句
不能对只读属性赋值,否则报错
不能使用前缀 0 表示八进制数,否则报错
不能删除不可删除的属性,否则报错
不能删除变量delete prop,会报错,只能删除属性delete global[prop]
eval不会在它的外层作用域引入变量
eval和arguments不能被重新赋值
arguments不会自动反映函数参数的变化
不能使用arguments.callee
不能使用arguments.caller
禁止this指向全局对象
不能使用fn.caller和fn.arguments获取函数调用的堆栈
增加了保留字(比如protected、static和interface)
上面这些限制,模块都必须遵守。

模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

什么是作用域

 作用域(scope) 规定了变量能够被访问的 范围,离开这个范围变量不能被访问 一旦进入作用域,就启动js解析器

作用域分为全局和局部作用域 


       局部作用域分为 函数作用域 和 块作用域
       函数作用域:在函数内部声明的变量只能在函数内部被访问,外部无法直接访问
       1:函数内部被访问,外部无法直接访问
       2:函数的参数也是函数内部的局部变量
       3:函数执行完毕后,函数内部的变量实际就被清空了

       块作用域(let,const):  {} 包裹的代码称为代码块,代码块内部用let声明的变量外部将无法被访问
        1:let声明的变量会产生块作用域  var 不会产生块作用域
        2:不同代码块之间的变量无法互相访问
        3:推荐使用 let和const


        全局作用域:全局作用域中声明的变量,任何地方都可以被访问
        1.为 window对象动态添加的属性默认也是全局的(var) 不推荐
        2.函数中未使用任何关键字声明的变量为全局变量  不推荐
        3.尽可能少的声明全局变量,防止全局变量被污染
       
        预解析
        找到var后,将var后的变量名提取出来,并给它初始化一个值undefined
        当变量与函数同名时,丢变量,保函数
        当有多个script标签时,从上到下依次解析并执行第一个script标签,然后下一次,依此类推
        在上面script标签中声明的东西,下面script标签中都可以使用
        在下面script标签中声明的东西,上面使用都会报错
        如果在函数作用域中有一个隐式声明的变量,这个变量会在全局作用域中自动生成

作用域链

函数内部创建新的函数 ,就产生了新的函数作用域,作用域就产生了嵌套关系
作用域链的本质 是底层的变量查找机制,函数被执行时 会优先查找当前函数作用域中的变量,如果找不到则会逐级查找父级作用域直到全局作用域 ,全局找不到 变量返回undefined  函数调用报错
子作用域能够访问父作用域
父作用域无法访问子作用域

闭包

 闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。

 闭包的作用

延伸变量的作用范围

 function fn() {
   var num = 10;
   function fun() {
       console.log(num);
 	}
    return fun;
 }
var f = fn();
f();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值