封闭空间和自执行函数
封闭空间用来防止全局函数名污染空间,该函数名仅在封闭空间内部
有效;
封闭空间可以用来写自执行函数
;
(function print() {
console.log('msg1');
})();
(function print() { // 函数名相同
alert('msg2');
})();
// console: msg1
// alert: msg2
自执行函数
可以是匿名函数
(function () {
console.log('msg');
})();
// console: msg
封闭空间内函数可以传参,在执行括号内写参数值(sth)
,在匿名函数声明时写参数;
(function (arg) {
console.log(arg);
})('msg');
// console: msg
但要注意的是,封闭空间函数不能连续执行,只有第一次
会被执行,
猜想: 第二个执行('msg2')
不会识别封闭空间内的函数,而会把第一个执行('msg')
误认为函数,
但第一个括号内并不是函数,而是一个参数,所以报错TypeError;
(function (arg) {
alert(arg);
})('msg1')('msg2');
// alert: msg1
// console: Uncaught TypeError: (intermediate value)(...) is not a function
验证:如果将返回值
设为一个函数
,返回后第一个执行获得函数,可以连续执行;
(function (arg) {
alert(arg);
return function (arg) {
alert(arg);
};
})('msg1')('msg2');
// alert: msg1
// alert: msg2