js函数的定义和调用和其他语言差不多,和定义在对象里面的函数也是一样的调用方法
function hanshu(a,b,c){
console.log(a,b,c)
}
hanshu(1,2,3)
然后就是今天的重头戏立即执行函数了
先看用途
JavaScript 中的立即执行函数(Immediately Invoked Function Expression,IIFE)常用于以下情况:
1. 避免命名冲突:可以将代码包装在立即执行函数中,以便在全局范围内创建作用域。由于 IIFE 中的变量在外部是不可访问的,因此可以避免与全局命名空间中的其他变量发生冲突。
//立即执行函数的第一种定义方式
(function() {
// 在此定义的变量和函数只在此立即执行函数的作用域内可用
})();
//第二种定义方式
(function(){
// 在此定义的变量和函数只在此立即执行函数的作用域内可用
}());
// 切记要打分号
2. 模块化代码:IIFE 可以用于将相关代码封装在一起,创建一个私有作用域,并确保模块的变量和函数不会在其他地方被访问或修改。
let myModule = (function () {
let counter = 0;
function incrementCounter() {
counter++;
}
function resetCounter() {
counter = 0;
}
return {
increment: incrementCounter,
reset: resetCounter
};
})();
myModule.increment(); // counter = 1
myModule.reset(); // counter = 0
increment(); //直接调用会报错,因为找不到对应的函数
3. 性能优化:立即执行函数可以减少全局变量的使用,从而减少命名冲突的可能性,提高代码性能和可维护性。
立即执行函数的内部的变量和函数对于外部代码来说都是不可见的,因此也无法被修改。这种隔离作用域的机制可以有效地避免变量污染和冲突。同时,由于IIFE只会执行一次,因此不会对性能产生明显的影响。
JavaScript中有变量提升的概念,即变量在定义之前就已经被提升到了作用域的顶部。在立即执行函数中,函数内部的变量和函数都是按照代码的书写顺序来解析和执行的,避免了变量提升可能带来的问题。
总之,立即执行函数最常用于创建私有作用域、模块化代码和优化性能。