我遇到了一些奇怪的行为,在使用立即调用的函数表达式时我没想到会发生这种行为。当最后有一个IIFE时,下面的代码运行函数hello
。为什么会这样?
var hello = function () {
console.log("hello");
}
(function () {
})();
答案 0 :(得分:3)
运行它,它不会
db.getCollection('patients').aggregate([
{ "$group": {
"_id": null,
"param1_count": {
"$sum": {
"$cond": [ "$param1", 1, 0 ] /* similar to "$cond": [ { "$eq": [ "$param1", true ] }, 1, 0 ] */
}
},
"param2_count": {
"$sum": {
"$cond": [ "$param2", 1, 0 ]
}
},
"param3_count": {
"$sum": {
"$cond": [ "$param3", 1, 0 ]
}
},
"param4_count": {
"$sum": {
"$cond": [ "$param4", 1, 0 ]
}
}
} },
{ "$project": {
"_id": 0,
"param_counts": {
"param1": "$param1_count",
"param2": "$param2_count",
"param3": "$param3_count",
"param4": "$param4_count"
}
} }
])
这是因为JavaScript解释器将其理解为连续代码,除非您将var hello = function () {
console.log("hello");
};
(function () {
})();
标记为语句的结尾。
您的代码
;
实际上就像这样
var hello = function () {
console.log("hello");
}
(function () {
})();
解释器以var hello = function () {
console.log("hello");
}(function(){})();
作为参数立即运行hello
函数,并为下一个function () {}
抛出错误。