javascript 这样写有什么用途?一般是用在什么地方
(function(){
})()
使用()将匿名函数包裹起来,就成了函数表达式.
再在后面添加一个括号,该表达式就会执行。
var k = function(){
console.log(1)
}
k() //执行
(function(){
console.log(1)
})() //自执行
还有更多中匿名函数表达式的写法,可参考 javascript调用匿名函数的多种方式。
我来补充一点,关于为什么最外层要用括号括起来。
在javascript中有两种常用的声明函数的方法。
函数声明:
function foo() {
//
}
函数表达式
var foo = function() {
//
}
如果function出现在行首,解析器会认为是一个函数声明,函数声明不能立即执行。如果要使用立即执行的函数,必须使用函数表达式。但是函数表达式的function关键字不能出现在行首,所以要用括号将整个表达式括起来。
即:
(function(){
// Code goes here
}());
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
全局命名空间污染与 IIFE
总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域。这一举措可防止全局命名空间被污染。
IIFE 还可确保你的代码不会轻易被其它全局命名空间里的代码所修改(i.e. 第三方库,window 引用,被覆盖的未定义的关键字等等)。
不推荐
推荐
IIFE(立即执行的函数表达式)
无论何时,想要创建一个新的封闭的定义域,那就用 IIFE。它不仅避免了干扰,也使得内存在执行完后立即释放。
所有脚本文件建议都从 IIFE 开始。
立即执行的函数表达式的执行括号应该写在外包括号内。虽然写在内还是写在外都是有效的,但写在内使得整个表达式看起来更像一个整体,因此推荐这么做。
不推荐
推荐
so,用下列写法来格式化你的 IIFE 代码:
如果你想引用全局变量或者是外层 IIFE 的变量,可以通过下列方式传参:
全文阅读:前端编码风格规范之 JavaScript 规范