封闭函数的用途
解决全局变量的安全性
由于函数中可以修改全局变量
极不安全
<script>
var i = 10;
function counta() {
i += 1;
alert(i)
}
counta()
alert(i)
</script>
通过封闭函数可以解决
封闭函数的写法
普通函数转成封闭函数
原始的函数的定义与调用
function 函数名(){函数体}
函数名()
封闭函数,直接定义与调用
(函数体)()
~函数体()
!函数体()
;(函数体)()
函数体是函数的本体
可以是函数的定义,也可以是一个匿名函数的定义
代码
<script>
var i = 10;
// function counta() {
// var i = 20
// i += 1;
// alert(i)
// }
// counta()
(function() {
var i=12
i += 1;
alert(i+"haha")
})()
alert(i)
</script>
封闭函数的写法二,去括号情况
~或者!
在封闭函数的前面加上~或者!符号
可以省掉一个()
~形式
<script>
var i = 10;
~function() {
var i=12
i += 1;
alert(i+"haha")
}();
alert(i)
</script>
!形式
<script>
var i = 10;
!function() {
var i=12
i += 1;
alert(i+"haha")
}();
alert(i)
</script>
封闭函数的写法三,防压缩的写法
压缩后的代码会在一行显示
通过分号进行分割
代码
<script>
var i = 10;
;(function() {
var i=12
i += 1;
alert(i+"haha")
})();
alert(i)
</script>
事实上
不使用封闭函数
可是可以解决全局变量安全问题的
只需要函数内部定义一个与全局变量同名的变量(局部变量)
函数中要对该变量进行操作
是不会影响全局变量的