这三个规范有什么用:
这三个规范可以帮助你加载各个模块,完成各个模块的作用域独立
那么模块是什么,作用域又是什么?
1、作用域:
作用域指在一个区域内有效的区域。
熟悉javascript的应该知道,javascript是函数级作用域,在函数内可以访问到函数外的变量,而函数外不能访问到函数内的变量,这个就是函数的作用域。
在函数外的变量会变成全局变量。一个比较大的项目需要很多变量命名,很容易就会造成命名冲突。那么该怎么解决呢,我们知道函数内的变量是不被外部访问的,自然也不会造成对命名冲突。那么该怎么使用函数去进行避免命名冲突呢?下面引入我们的模块:
2、模块:
模块具有对外可见,外部不可修改,作用域独立的效果。那么什么是模块呢?
个人理解为一个立即执行的函数,可以是一个匿名函数,并且立即执行。
(function(){
var name = "张三";
console.log(name) // 张三
})()
console.log(name) // undefined
这样可以成为一个模块,函数内部可以访问到变量,外部则访问不到。不过一般一个标准的模块应该这么用:
var user = (function(){
var name = "张三";
// 获取名字
function getName(){
return name;
}
// 修改名字的方法
function setName(name){
name = name;
}
// 向外提供的方法
return {
getName:getName,
setName:setName,
}
})()
console.log(user.getName()) // 张三
user.setName("李四")
console.log(user.getName()) // 李四
这样是不是就可以做到作用域独立,对外提供我想要提供的方法。实现了获取名字,修改的名字的功能。并且不会造成环境的变量污染。
commonJs规范:
下面看一个小例子:
创建一个index.js文件:
// index.js
var name = "张旭伟"
在创建一个 index2.js文件:
// index2.js
console.log(name)
创建一个html文件将他们一起引入:
<script type="text/javascript" src="index.js"></script>
<script type="text/javascript" src="index2.js"