Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IIFE-立即调用函数表达式 #2

Open
K-Kevin opened this issue Sep 14, 2019 · 0 comments
Open

IIFE-立即调用函数表达式 #2

K-Kevin opened this issue Sep 14, 2019 · 0 comments

Comments

@K-Kevin
Copy link
Owner

K-Kevin commented Sep 14, 2019

我们常常会看到这样的函数格式:

(function () {
    // ...函数体执行逻辑
})();

其实这是一个自执行函数,一般用来包裹自身的业务逻辑,在 jQuery、underscope 等等这些知名的第三方库里都有用到,目的是:

  • 避免全局污染:所有库的逻辑,库所定义和使用的变量全部被封装到了该函数的作用域中。
  • 隐私保护:在立即执行函数中声明的函数、变量等,除非是自己想暴露,否则无法在外部活的。

那我们这个时候就知道了自执行函数的作用了。

这是一个被称为自执行匿名函数的设计模式,主要包含两个部分。第一部分是包围在圆括号运算符 ( ) 里的一个匿名函数,这个匿名函数拥有独立的词法作用域。不仅可以避免外界访问此 IIFE 中的变量,而且不会污染全局作用域。

第二部分再一次使用了 ( ) 我们就知道了其实是创建了一个立即执行的表达式,JavaScript 引擎到此将直接执行函数。

示例:

当函数变成立即执行的函数表达式时,表达式中的变量不能从外部访问。

(function () { 
    var name = "kai";
})();
// 无法从外部访问变量 name
console.log(name)	//undefined

将 IIFE 分配给一个变量,不是存储 IIFE 本身,而是存储 IIFE 执行后返回的结果。

var result = (function () { 
    var name = "kai"; 
    return name; 
})(); 
// IIFE 执行后返回的结果:
result; // "kai"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant