这段JS代码是怎么回事?

Whats going on in this bit of JS code?

本文关键字:怎么回事 代码 JS 这段      更新时间:2023-09-26

我正在看一个Angular JS教程,它一直在使用这个代码片段的变体,而没有解释它。

(function(param, undefined){
  //Normal function definition in here
  ...
}(bar.foo = bar.foo || {}));

所以我得到的最多。我认出了下面这个自执行的函数,用来封装javascript的一些代码,以避免作用域污染。

(function(param, undefined){
  //Normal function definition in here
  ...
});

但是我不明白函数定义后面有括号的语法。

编辑

我明白括号里面发生了什么。我不明白的是函数定义后括号的语法:function(...){...}(...);

这是一个需要参数的自执行函数。bar.foo是发送给它的参数(使用该函数时为param)。如果bar.foo在函数执行之前没有值,则将其设置为{},否则将其设置为自身,然后传入。

(function(param1, param2, param3) {
  var ele = document.getElementById("result");
  ele.innerHTML += "param1: " + param1;
  ele.innerHTML += "<br />";
  ele.innerHTML += "param2: " + param2;
  ele.innerHTML += "<br />";
  ele.innerHTML += "param3: " + param3;
  ele.innerHTML += "<br />";
  param3 = param3 || "bananas";
  ele.innerHTML += "param3 after change: " + param3;
})("apples", "oranges");
<div id="result"></div>

函数正在被触发。Foo = bar。Foo ||{})作为参数。如果酒吧。Foo存在,那么函数将取bar。Foo作为参数。如果它是未定义的(这是假的),那么它将接受{}作为参数。我希望这对你有帮助!

在函数声明后加上圆括号将立即启动对它的调用。这和下面的操作是一样的:

var fn = function () { ... };
fn();

因为函数声明的返回值是函数对象,当对函数对象应用括号时,调用它。像往常一样,括号内的内容是函数的参数

foo被定义,使用它——但如果它没有定义,使用这个空对象({})

编辑-适合新的说明

它的位置意味着在执行函数之前,它将处理bar。foo赋值;比如设置默认值