前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js中(function(){})()的写法用处

js中(function(){})()的写法用处

作者头像
帅的一麻皮
修改2020-03-11 10:12:59
3.4K0
修改2020-03-11 10:12:59
举报
文章被收录于专栏:前端与Java学习前端与Java学习

以前看到老师写js的单例模式时疑惑为什么要这么写

代码语言:javascript
复制
var singleton = (function () {
    var privateVariable;
    function privateFunction(x) {
        ...privateVariable...
    }
    return {
        firstMethod: function (a, b) {
            ...privateVariable...
        },
        secondMethod: function (c) {
            ...privateFunction()...
} };
}());

后来查了下资料,js中(function(){…})()立即执行函数写法理解,终于了解了。

来来来,首先嘛,JS中函数有两种命名方式

1、一种是声明式。

而声明式会导致函数提升,function会被解释器优先编译。即我们用声明式写函数,可以在任何区域声明,不会影响我们调用。

代码语言:javascript
复制
function XXX(){}1

2、一种是函数表达式

代码语言:javascript
复制
函数表达式我们经常使用,而函数表达式中的function则不会出现函数提升。而是JS解释器逐行解释,到了这一句才会解释。因此如果调用在函数表达式之前,则会调用失败。
fn1();
function fn1(){}//可以正常调用
fn2();
var fn2 = function(){}//无法调用

OK,下面进入正题,对函数表达式加上(),是可以直接调用的

但是如果是对声明式的后部加上()则是会被编译器忽略。

代码语言:javascript
复制
var fn2 = function(){}();//对,就是这样
function fn1(){}();//{}会被忽略

而平常的function(){}则是一种声明式,如果加上()括号后,则会被编译器认为是函数表达式,(加上+-号都可以),从而可以用()来直接调用

代码语言:javascript
复制
(function fn1(){})();

以上转自:https://blog.csdn.net/u010958922/article/details/47007589?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task


代码语言:javascript
复制
for (var i = 0; i < oLi.length; i++) {
    (function (m) {
 oLi[m].onmouseover = function () {
 console.log(m);
 oImg[indexBan].className = "";
 indexBan = m;
 oImg[indexBan].className = "banOn";
 onChange();
        }
    })(i)//回调函数
}

看上去(function(j){})(i)比较神奇,其实很简单,第一个括号定义了一个匿名函数,后一个括号是指调用了这个函数,并传入参数i。当然这个匿名函数接受一个参数,命名为j

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、一种是声明式。
  • 2、一种是函数表达式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档