下面的JavaScript代码定义了一个立即执行(自执行)的匿名函数:
(function(){
// 定义一个名为openNewWeb的函数,接收一个url参数,但此处未实现具体功能
function openNewWeb(url){
// 可以在这里添加打开新网页的功能逻辑,例如:
// window.open(url, '_blank');
};
// 将openNewWeb方法作为一个属性添加到window.mobileOCjs对象中
window.mobileOCjs = {
openNewWeb: openNewWeb
}
})(); // 立即执行这个匿名函数
该函数内部定义了一个名为openNewWeb的方法,并将其作为属性挂载到全局对象window下的mobileOCjs对象上,这样,在全局作用域下,你就可以通过 mobileOCjs.openNewWeb('url') 来调用这个方法并传入相应的URL来打开新的网页。当然,在上述代码中,openNewWeb方法的具体实现是空的,你需要根据需求填充具体的网页打开逻辑。
注: 最后的()
的作用是此函数需要立即执行。
1、什么是立即执行函数?
立即执行的函数(Immediately Invoked Function Expression,IIFE)是一种在定义后立即执行的JavaScript函数。这种函数不会定义函数名,定义后立即执行,并且其作用域仅限自身内部,不会污染全局作用域。
-
特点:
1、匿名性:这种函数没有名称,通过一个函数表达式来定义。
2、自执性:函数定义完成后会立即执行,不需要像普通函数那样通过调用函数名的方式来执行。 -
立即执行函数的优点:
1、避免污染全局作用域:定义在IIFE内部的变量和函数不会成为全局变量,从而避免了潜在的命名冲突问题。
2、创建私有作用域:IIFE可以用来创建一个私有的、封闭的作用域,在这个作用域内声明的变量和函数只能在这个作用域内访问,外部无法直接访问。
3、模块化编程:IIFE可以用于实现模块化的代码组织方式,每个模块都有自己独立的作用域,各模块间互不影响。
2、立即执行函数的语法格式
- 使用括号包裹函数表达式并立即调用:随后一对空括号立即执行返回的未命名函数,括号内是匿名函数的参数
(function() {
// 这里是函数体
console.log('This function is executed immediately');
})();
eg.
(function (arg) {
console.log(arg+100);
})(20);
//控制台打印结果:120
- 利用运算符进行调用,如void、+、-、!、~等一元运算符:
!function(arg) {
// 函数体
console.log(arg+100);
}(20);
+function(arg) {
// 函数体
console.log(arg+100);
}(20);
-void function(arg) {
// 函数体
console.log(arg+100);
}(20);
void function(arg) {
// 函数体
console.log(arg+100);
}(20);
~function (arg) {
/ / 函数体
console.log(arg+100);
}(20);
- 将函数作为参数传递给另一个函数并立即调用
(function() {
/ / 函数体
console.log('Executed right away');
}).call(this);
3、使用例子
(function() {
var privateVar = 'I am private';
function privateFunction() {
console.log(privateVar);
}
window.publicAPI = {
logPrivateVar: function() {
privateFunction(); // 可以访问到闭包内的privateVar和privateFunction
}
};
})();
// 调用公开接口
publicAPI.logPrivateVar(); // 输出 "I am private"
// 但不能直接访问闭包内的私有变量或函数
console.log(privateVar); // 报错,因为privateVar在全局作用域中未定义
网友评论