Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery库模块导出_Javascript_Jquery_Module_Umd - Fatal编程技术网

Javascript JQuery库模块导出

Javascript JQuery库模块导出,javascript,jquery,module,umd,Javascript,Jquery,Module,Umd,我试图理解jQuery是如何建立自己的 在一开始,jQuery自动调用一个函数,该函数导出一个模块 设置是如何工作的 下面是一些更详细的子问题,这些问题可能会回答更一般的问题: 在模块导出中递归调用函数(w)有什么用 noGlobal变量的用途是什么 工厂实际设置在哪里?工厂类型是什么 为什么可以用一个参数和两个参数调用工厂参数 global参数应该包含什么?(我希望有一个类似于C++的类型) 在模块导出中递归调用函数(w)有什么用 它不是递归调用,更像是延迟初始化函数。在一些常见的JS环

我试图理解jQuery是如何建立自己的

在一开始,jQuery自动调用一个函数,该函数导出一个模块

设置是如何工作的

下面是一些更详细的子问题,这些问题可能会回答更一般的问题:

  • 模块导出中递归调用
    函数(w)
    有什么用
  • noGlobal
    变量的用途是什么
  • 工厂实际设置在哪里?工厂类型是什么
  • 为什么可以用一个参数和两个参数调用
    工厂
    参数
  • global
    参数应该包含什么?(我希望有一个类似于C++的类型)

模块导出中递归调用
函数(w)
有什么用

它不是递归调用,更像是延迟初始化函数。在一些常见的JS环境中,如Node.JS,全局对象没有
文档
属性,而Browserify和Webpack等其他环境则有

jQuery需要初始化
document
属性,因此它首先检查全局对象是否包含
document
属性。如果确实如此,它会立即初始化,使浏览器中的CommonJS环境变得愉快。如果没有,则返回一个函数,该函数可用于以后初始化jQuery。这个函数稍后可以在一个假窗口上调用,用jsdom之类的东西创建


noGlobal
变量的用途是什么

此处使用
noGlobal
变量

// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
    window.jQuery = window.$ = jQuery;
}
本质上,如果
noGlobal
undefined
,jQuery将自己添加到全局
窗口
对象中。它唯一不会这样做的是,如果它是由CommonJS加载程序加载的,并且全局对象上有
文档
属性,例如Browserify或Webpack。下面的调用是
noGlobal
未定义的地方

factory( global, true )

工厂实际设置在哪里?工厂类型是什么

工厂
变量是一个
函数
,在此声明:

function( window, noGlobal ) {
这是第二个被传递到数据库中的参数


为什么可以用一个参数和两个参数调用
工厂
参数

因为JavaScript

在JavaScript中,不需要匹配函数声明的参数数量。任何省略的参数都具有值
未定义

factory( global, true )

global
参数应该包含什么?(我希望C++中有一个类似的类型)

它应该包含JavaScript环境的全局对象。在浏览器中,此对象称为
窗口
,在节点中,此对象称为
全局
。在这两种环境中,在全局范围中使用
this
将解析为全局对象,不管它的全局名称是什么

但是,由于某些第三方包装器可以更改jQuery初始化的范围,jQuery将首先检查
窗口是否可用,如果可用,则使用它。如果不使用,它将默认使用

typeof window !== "undefined" ? window : this


还有一个问题:w论点来自哪里


如果全局对象不包含
文档
,它将返回一个函数,该函数接受一个参数
w
。这个对象将是一个类似于
窗口的对象,它有一个
文档
,可以用类似jsdom的东西创建。

还有一个问题:w参数来自哪里?@初学者当全局对象不包含
文档
时,它返回一个接受一个参数的函数,
w
。此对象将是一个类似于
窗口的对象,带有一个可以使用类似jsdom的东西创建的
文档。这是否意味着w是一个全局变量,在没有可用文档的情况下可用?不完全是这样。当jQuery没有全局文档时,它将返回一个函数,该函数稍后可用于初始化jQuery。要做到这一点,您需要调用该函数,并传入要对其进行初始化的类似窗口的对象。类似窗口的对象是您必须创建的对象,当您想要初始化它时,必须使用类似jsdom和pass的东西。类似这样:
var$=require('jquery')(myFakeWindow)
,其中
myFakeWindow
是您创建的类似窗口的对象。好的,我知道了:w是正好在这个位置定义的函数的参数。这是一个自由变量,此时不需要定义,对吗?