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);
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

如下图:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容