Javascript 生活和窗口对象?

Javascript 生活和窗口对象?,javascript,jquery,Javascript,Jquery,iLife需要访问非重写的窗口对象-可以看作: 例如: 但有时我也会看到这个(): 问题1:有什么区别吗?如果是,我应该在什么时候使用它们 问题2:这个内部iLife是窗口。为什么需要“发送”窗口/调用(此)?(jQuery没有使用严格模式imho) 铌 看起来jQuery(自1.11.0以来)也采用了这种模式: (function (global, factory) { //.... }(typeof window !== "undefined" ? window : this, fu

iLife
需要访问非重写的
窗口
对象-可以看作:

例如:

但有时我也会看到这个():

问题1:有什么区别吗?如果是,我应该在什么时候使用它们

问题2
这个
内部
iLife
窗口
。为什么需要“发送”
窗口
/
调用(此)
?(jQuery没有使用严格模式imho)

看起来jQuery(自1.11.0以来)也采用了这种模式:

(function (global, factory)
{
   //....

}(typeof window !== "undefined" ? window : this, function (window, noGlobal)
{
   //...
});
下划线是一个javascript库而不是DOM库,因此它不应该在任何地方使用window,因为javascript不是DOM,window是一个DOM api

使用这种方法,下划线不会绑定到DOM。试图在nodejs或rhino中调用window是行不通的,也没有任何意义

编辑:


调用将函数的上下文设置为此(全局或窗口),因此无需将任何内容作为参数传递。

那么,为什么它仍然使用
?因为这是指向作用域的有效javascript。如果在控制台中键入此项,它将返回窗口。我问的是这2:-)之间的区别。例如,为什么下划线没有这样做:
(函数(根){//…})(this)而不是?(为了设置上下文)$是jquery的快捷方式,为什么要使用它?我知道调用设置上下文也适用。但是在iLife中-
这个
已经引用了全局对象。另外-选择应用/调用与发送<代码>此是否有任何原因?(这实际上是我的两个简单问题)在某些JS环境中可能没有
窗口
变量……而@Bergi则可以这样做:
$(函数(全局){//doeswithglobal})(这)…否?@Bergi你能帮我找到IIFE中的上下文是全局对象吗?(我找不到它)不一定在IIFE内部(通过普通调用逻辑),但(作为参数传递给
.call()
的)始终是全局对象。@Bergi你是说当我执行
f()
时,它实际上运行
f.call
(function() {
  var global= this;
  // do something with global
}).call(this);
(function (global, factory)
{
   //....

}(typeof window !== "undefined" ? window : this, function (window, noGlobal)
{
   //...
});
(function() {
  var win = this;
  // do something with win
  }).call(this);