-1

今天我看到了这段代码,它在 node.js 环境中运行。(>node.exe 测试.js)

var param = (typeof module !== "undefined" && module.exports) || {};

(function(exports){

   console.log(exports === module.exports);

})(param);

这个日志返回了 true。

任何人都可以向我解释这种行为吗?

提前致谢。

4

2 回答 2

3

如果module不是未定义的(它不是因为它是默认对象)并且module.exports是真实的事物(默认情况下是),则exports分配给param并传递给函数。

exports然后与 进行比较module.exports,它们是相同的,因为module.exports是对象最初来自的地方。

exports不会与module.exports它在其他地方运行(例如,您获得的浏览器window,而不是module)相同,因为{}它将被分配给param。)


更新对问题的评论:

嗯,也许是错的,但我认为 ((typeof module ..) || {}) 将返回 true,但不会返回“exports”对象

不会。&&将(从左到右)评估为它测试的第一个虚假事物或(如果一切都是真实的)它测试的最后一个真实事物。

typeof module !== "undefined"是真的,所以它测试module.exports,这也是真的,所以它返回module.exports

||返回它测试的第一个真实或最后一个虚假的东西,所以它然后返回module.exports

于 2012-06-18T12:54:16.360 回答
2
var d = (a && b) || c

d评估b是否a为真。如果a为假,则d评估为c

于 2012-06-18T12:54:06.423 回答