有很多方法立即执行匿名函数,简单的整理就有下面三种的典型方式(还有其他方式的,欢迎告知):
方式一
(function() {
// …
})();
方式二
void function() {
// …
}();
方式三
~function() {
// …
}();
方式一 和 方式二 大家可能都看到过,这里主要说明下 方式三。在说明 方式三 之前,我们现回顾下运算符“~”(位取反)在 EMCAScript 中的定义(第五版的第 72 页),简单的翻译下:
1. 按运算符结合语句
2. 将旧值转换为 32 位整型
3. 执行运算符后的语句
4. 转换之行结果为 32 位整形并返回
从上面可以了解,其实位运算符都能立即返回后面表达式的值。其实其他位运算符都可以达到这样的目的,例如:
!function() {
// …
}();
等都可以达到我们的目的。所以其实用“~”也并无其他的原因,仅仅是代码“看着好看”而已 :^)
* 方式一的写法很常见而且很保险,所以并不会有人因为你使用这种方式而责怪你
* 但使用方式一的同学,可能经常会犯忘记匹配括号的“毛病”(特别是语句块很长时,就经常搞错)
* 使用位运算符执行匿名函数很新潮,用来装逼酷不错
* 很多 IDE (如 IDEA)以及语法高亮工具不支持 方式三 的写法
* void 效率最好,但总感觉相比其他两种实现方式非常的臃肿(仅仅多几个字符?)
* 综合代码量以及效率等情况考虑,用 方式一 没错的
* 在需要额外节省代码的极端情况,用 方式三
* 考虑效率优先,那么使用 方式二
方式一
(function() {
// …
})();
方式二
void function() {
// …
}();
方式三
~function() {
// …
}();
方式一 和 方式二 大家可能都看到过,这里主要说明下 方式三。在说明 方式三 之前,我们现回顾下运算符“~”(位取反)在 EMCAScript 中的定义(第五版的第 72 页),简单的翻译下:
1. 按运算符结合语句
2. 将旧值转换为 32 位整型
3. 执行运算符后的语句
4. 转换之行结果为 32 位整形并返回
从上面可以了解,其实位运算符都能立即返回后面表达式的值。其实其他位运算符都可以达到这样的目的,例如:
!function() {
// …
}();
等都可以达到我们的目的。所以其实用“~”也并无其他的原因,仅仅是代码“看着好看”而已 :^)
* 方式一的写法很常见而且很保险,所以并不会有人因为你使用这种方式而责怪你
* 但使用方式一的同学,可能经常会犯忘记匹配括号的“毛病”(特别是语句块很长时,就经常搞错)
* 使用位运算符执行匿名函数很新潮,用来装逼酷不错
* 很多 IDE (如 IDEA)以及语法高亮工具不支持 方式三 的写法
* void 效率最好,但总感觉相比其他两种实现方式非常的臃肿(仅仅多几个字符?)
* 综合代码量以及效率等情况考虑,用 方式一 没错的
* 在需要额外节省代码的极端情况,用 方式三
* 考虑效率优先,那么使用 方式二