慧聪网de网站建设策略,网站开发环境和运行环境,wordpress图片上传到云,免费网站统计工具没想到的 IIFE
有时候我们想要立即执行一下所定义的函数#xff0c;可以怎么做呢#xff1f;
function foo(num) {return num ?? 1;
}foo();写完然后调用对吧#xff0c;这是可以的#xff0c;但你有没有觉得这其实有点脱裤子放屁了#xff0c;完全可以直接调用就是了…没想到的 IIFE
有时候我们想要立即执行一下所定义的函数可以怎么做呢
function foo(num) {return num ?? 1;
}foo();写完然后调用对吧这是可以的但你有没有觉得这其实有点脱裤子放屁了完全可以直接调用就是了对吧也就是 IIFEImmediately-Invoked Function Expression立即执行的函数表达式。
(function foo() {return num ?? 1;
})()有人说 IIFE 很简单呀还需要你写文章吗如果我是要写怎么使用 IIFE当然没必要我写这个是因为我发现了一点有趣的东西。
什么呢我们先来看三段语句
function foo() {return num ?? 1;
}()function foo(num) {return num ?? 1;
}(2)(function foo(num) {return num ?? 1;
}());你觉得上面这些能执行成功吗 不是想考哈考这个太没意思了主要就是探究一下 是不是不知道了哇先不要慌我们从头看
function foo(num) {return num ?? 1;
}foo();从这里是不是可以看出只要在函数名后面加上圆括号就能调用执行函数了。那么我们可以大胆的猜测直接在函数后面添加括号是不是也可以执行呢
我们来看看呢
function foo(num) {return num ?? 1;
}();
// SyntaxError Unexpected token )执行直接会报语法错误为什么呢因为
function foo(num) {...} 是一段语句函数声明语句放在语句后的括号与前面的语句完全分开只是一个分组运算符用作控制计算优先级的手段此时的括号里面需要包含一个表达式。
那么下面这段代码的结果就不言而喻了
function foo(num) {return num ?? 1;
}(2)既不会报错也不会执行 foo因为 (2) 和前面的语句是完全分开的。
那再来看第三段
(function foo(num) {return num ?? 1;
}());这就能正常执行了为什么呢
因为
括号里面的内容都会识别为表达式放在表达式后的括号表明该表达式是要调用的函数
当然下面这种也是能正常工作的左侧括号使一个表达式。
(function foo(num) {return num ?? 1;
})();我想看到这里你应该知道为啥在文章开头我要将 “立即执行的函数表达式” 中的函数表达式标红了吧这里也纠正一个常犯的错误IIFE 可不是一个函数而是一个表达式哟