javascript|“怪异的写法”()
var a;
(function(){
a.f1 = {},
a.f2 = "String"
}) ();
alert(a.f2)
首先,用括号包围起来的 function(){...} 被js引擎认为是一个function表达式,后面的 () 就调用了这个匿名函数。
如果你写成 function(){...}() 那就是语法错误,因为js引擎会期待这里是一个有名字的function声明(func声明与func表达式是不同的);
但是可以写成 void function(){...}() 也是可以的,因为void关键字会告诉js引擎后面要跟一个表达式,所以后面就被认出来是一个function表达式所产生的匿名函数对象,并进行调用的结果,void会把调用结果抛弃。
另外 new function(){}() 也是类似的。
这样写的主要好处是,可以把一些不希望暴露出来的内部变量和方法隐藏在匿名函数里面。(
特别是这点。比如直接在js中写:
for(var i = 0;
i < ...;
i ++)
...
那么就会有一个window.i属性被设置,长期存在
而用 (function () { for ( ...) })() 就只是局部变量,执行完就能被清除 )
【javascript|“怪异的写法”()】
推荐阅读
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 艾略特的交易法则“遵循自然规律”
- 闲杂“细雨”
- “成长”读书社群招募
- 上班后阅读开始变成一件奢侈的事
- “精神病患者”的角度问题
- 说的真好
- 2021-02-10(找不回的“年味”……)
- 事件代理
- “不完美,才美”01(190410)