Javascript JQuery数据来自哪里?

Javascript JQuery数据来自哪里?,javascript,jquery,function,parameters,Javascript,Jquery,Function,Parameters,我见过许多使用参数的JQuery函数。尽管我使用了它们,但在不知道后端如何工作的情况下,它感觉相当不完整。 例如,让我们使用单击方法: $("p").click(function(event){ event.preventdefault(); alert("testing 123"); }); 在这段代码中,如果我在方法中使用“this”,它将给我“p”元素本身。 但是,我无法理解“event”参数被分配了什么。 难道不应该有这样一个地方吗 var event = blah b

我见过许多使用参数的JQuery函数。尽管我使用了它们,但在不知道后端如何工作的情况下,它感觉相当不完整。 例如,让我们使用单击方法:

$("p").click(function(event){
    event.preventdefault();
    alert("testing 123");
});
在这段代码中,如果我在方法中使用“this”,它将给我“p”元素本身。 但是,我无法理解“event”参数被分配了什么。 难道不应该有这样一个地方吗

var event = blah blah;
所以事件参数有一些值

我通过按f12键单击了实际的JQuery文件,它将转到如下函数

jQuery.fn[ name ] = function( data, fn ) {
    return arguments.length > 0 ?
        this.on( name, null, data, fn ) :
        this.trigger( name );
};
我看不到该填充的任何位置,也看不到为名为“event”的参数赋值的位置

我对$.ajax请求也有同样的问题

$.ajax({
    type: "POST",
    url: url, 
    async: false,
    success: function (data) {  }
});
可见,在“数据”参数中有一个加载“数据”的地方,实际数据是如何以及在哪里填充的?我们什么时候加载实际数据。
我看到了一些类似的问题。

关于您的第一个问题,关于
事件
参数,
事件
是您的单击。它永远不会像普通变量那样显式声明。它只是一个参数,在您的示例中,单击就是事件


关于ajax问题,
数据
参数是成功发布后从后端返回的内容。例如,我使用ajax调用从前端发送一些信息。然后,我的后端使用该信息将数据发送回
success:function(data)
中的前端,就像JSON一样。JSON将是
数据
参数。

声明发生在函数参数本身中

声明
数据
事件
,或在函数参数内调用它的任何内容(任何单词都可以),实际上就是
var data=…
语句


在事件处理程序的实例中,
event
由浏览器传递给锁定该事件的任何函数。在ajax调用的情况下,正如@Alec所说,这是从服务器返回的数据。

jQuery基本上是一个使用许多方法返回对象的包装器。其中大多数都不是那么简单,如果您想更深入地理解,除了使用控制台和查看您可以在此处找到的源代码之外,您没有很多选择:。理想情况下,使用未压缩版本。对于某些方法,可能需要相当长的时间才能弄清问题的真相。单击回调的工作方式隐藏得相当深

您可以通过以下方式找到它:

在控制台中,输入$(“p”)。单击。您将获得:

ƒ ( data, fn ) {
        return arguments.length > 0 ?
            this.on( name, null, data, fn ) :
            this.trigger( name );
    }
这在源代码中来自这里:

jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
    "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    "change select submit keydown keypress keyup error contextmenu" ).split( " " ),
    function( i, name ) {

    // Handle event binding
    jQuery.fn[ name ] = function( data, fn ) {
        return arguments.length > 0 ?
            this.on( name, null, data, fn ) :
            this.trigger( name );
    };
} );
因为您至少有一个参数,所以它运行:
this.on(name,null,data,fn)
,其中
this
是您的jQuery对象$('p'),
name
是'click',
data
是您的函数(事件)。所以在
this.on()
上:

在这里,上的
函数不是全局函数,因此它在jQuery的闭包中,因此回到源代码,您可以在其中找到:

 function on( elem, types, selector, data, fn, one ) {
    ...
jQuery.event = {

    global: {},

    add: function( elem, types, handler, data, selector ) {
    ...
其中
elem
是jQuery对象
$('p')
types
是'click',
selector
为空,
data
是您的
函数(e)
fn
为空。这导致:

elem.each( function() {
        jQuery.event.add( this, types, fn, data, selector );
    } );
因此,您可以找到:

 function on( elem, types, selector, data, fn, one ) {
    ...
jQuery.event = {

    global: {},

    add: function( elem, types, handler, data, selector ) {
    ...
您可以在其中找到一个
addEventListener

elem.addEventListener( type, eventHandle, false );
addEventListener
上,回调具有
event
参数,该参数是本机javascript。在jQuery中,回调是
eventHandle
,因此让我们找到这个:

eventHandle = elemData.handle = function( e ) {

                // Discard the second event of a jQuery.event.trigger() and
                // when an event is called after a page has unloaded
                return typeof jQuery !== "undefined" &&
                    ( !e || jQuery.event.triggered !== e.type ) ?
                    jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
                    undefined;
            };
因此它返回函数
dispatch
,现在回调如下:
jQuery.event.dispatch.apply(eventHandle.elem,arguments)
,其中
arguments
e
(原始
addEventListener
事件)。因此,请查找
调度

 dispatch: function( event ) {

            // Make a writable jQuery.Event from the native event object
            event = jQuery.event.fix( event );
            ...
那么这是什么event.fix:

 fix: function( event ) {
            if ( event[ jQuery.expando ] ) {
                return event;
            }

            // Create a writable copy of the event object and normalize some properties
            var i, prop, copy,
                type = event.type,
                originalEvent = event,
                fixHook = this.fixHooks[ type ];
在这里你可以找到

  event = new jQuery.Event( originalEvent );

    jQuery.Event = function( src, props ) {
    ...
其中定义了作为
单击的参数传递的
事件
。您可以通过在
jQuery.Event.prototype
上添加属性来测试它。例如:

jQuery.Event.prototype.prop = 'newProp';
总之,函数中的事件(event)是jQuery.event的一个实例

console.log($('p')。单击);
console.log($('p').on);
console.log(jQuery.Event)
jQuery.Event.prototype.prop='test';
$('p')。单击(函数(事件){console.log(event.prop)})

测试

查看:(投票率最高的答案)和可能的重复