求教js中 function(){...}() 的涵义

发布于 2022-08-27 13:03:24 字数 439 浏览 16 评论 0

@怡红公子 讨论的时候发现了如下的问题,由于js基础薄弱,百思不得其解。

var arr = [1,2];

function test1(a){a[0] = 3}(arr);
console.log(arr); //[1,2]

(function test2(a){a[0] = 4}(arr));
console.log(arr);  //[4,2]

(function test3(a){a[0] = 5})(arr);
console.log(arr);  //[5,2]

test3很好理解,去掉头就可以……我是说去掉函数名就是平时常用的匿名函数用法。

test2没用过,但一直自我认为和test3是等价的。

test1 无法理解……求科普!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

两个我 2022-09-03 13:03:24
function test1(a){a[0] = 3}(arr);

就是

function test1(a){
  a[0] = 3
}

(arr);
呆萌少年 2022-09-03 13:03:24

2和3是等价的

芯好空 2022-09-03 13:03:24

第一种语法是错误的。开头function关键字声明的函数声明后面不能带括号,function test1(a){a[0] = 3}(arr);这行虽然没报错,但是代码不会执行。所以arr[0]并没有被操作。还是arr = [1,2]。
第二种和第三种是等价的,使用()操作符把函数声明转换成了函数表达式函数表达式后面可以带括号,并立即执行该函数。所以arr[0]的值都被操作成功了。
自己写的文章,可以参考下http://dengo.org/archives/1004

怀念你的温柔 2022-09-03 13:03:24

提供一个测试的思路,函数体内 {} 可改成

{
    alert(1);
}

第二种情况与第三种情况一样会弹出1,第一种情况不会哦,也就是没有执行函数嘛

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文