immediately Invoked Functions Expressions (IIFEs)

使用()将function expression放入其中,告诉编译器里面的是个expression, 立刻调用这个function。 这在很多库里面很多见。

我想到一点是, 这样我们可以声明自己的变量而不担心和其它的冲突。
javascript 在浏览器中,我们会把所有的代码顺序执行,包括库中的,所以名字有可能覆盖。


var firstname = 'Hao';

(function(name) {
   
   var greeting = "Hello ";
   console.log(greeting + name);
   
}(firstname));

// 把括号取出来也行
(function(name) {
   
   var greeting = "Hello ";
   console.log(greeting + name);
   
})(firstname);

// 当执行下面这个function时, s被绑定到this的一个属性了, 所以不需要声明,不需要使用new
func1 = function (){
    s = 'not use new';
}

func1();
console.log(this.s);

// 当执行下面这个function时,我们声明了一个变量 s, 当func结束时,这个func的执行环境没了,s也消失了即我们回到了一个没有s的主环境中。
func2 = function (){
    var s = 'use new';
}

func2();
console.log(func2);
immediately Invoked Functions Expressions (IIFEs)_第1张图片
image.png

下面这个例子,方程执行完后,greeting 还是 Hola,不会被影响。


var greeting = "Hola";
(function(global, name) {
    global.gg = "change the global obj";
    var greeting = "Hello ";
    console.log(greeting + name);
    
})(window, "John");

console.log(greeting);   // Hola

如下图:


immediately Invoked Functions Expressions (IIFEs)_第2张图片
image.png

你可能感兴趣的:(immediately Invoked Functions Expressions (IIFEs))