Javascript 将此和变量传递给导入的函数onclick

Javascript 将此和变量传递给导入的函数onclick,javascript,ecmascript-6,Javascript,Ecmascript 6,我完全被这段代码搞糊涂了,它似乎根本不起作用。 简单地说,就是这样: // in app.js import {layoutItemButtonClick} from '/blablaWrappeur.js' document.addEventListener('DOMContentLoaded', function () { var element = document.querySelector('.qq-element') //this is a html element ob

我完全被这段代码搞糊涂了,它似乎根本不起作用。 简单地说,就是这样:

// in app.js
import {layoutItemButtonClick} from '/blablaWrappeur.js'
document.addEventListener('DOMContentLoaded', function () {


    var element = document.querySelector('.qq-element') //this is a html element obj

    $('.layout-item-button').click(layoutItemButtonClick)
})

//in blablaWrappeur.js
export const layoutItemButtonClick = function () {
    const selectedLayout = this.dataset.layout.split("")
    doQqthing(element) // element is not defined

}

function doQqthing(element) {
    alert(element) /// not defined
}
我需要将元素和单击按钮的this上下文传递给layoutItemButtonClick函数,然后在其中传递给doQqthing函数

但是,它不是这样工作的

1)如果我让代码像这样运行并单击按钮,则不会发生任何事情

2)现在,如果我将click函数更改为this(将这些添加到函数调用中:

$('.layout-item-button').click(function () {
        layoutItemButtonClick()
    })
我得到一个
数据集未定义的错误

3)如果我将其更改为:

 $('.layout-item-button').click(layoutItemButtonClick())
我也犯了同样的错误

4)为此:

$('.layout-item-button').click(layoutItemButtonClick)
我得到一个
元素未定义
错误

我知道,如果我在函数中调用函数,这将是当前元素,如果在单击括号中,如3)和4),这将是本地范围。那么,如何将元素和this从单击传递到函数中呢

当调用定义为常量的函数时,为什么/如何使用括号起作用

提前谢谢

当调用定义为常量的函数时,为什么/如何使用括号起作用

layoutitembutton单击
与其他变量访问类似。它解析为变量的值,该变量是函数对象

layoutItemButtonClick()
otoh调用该函数并解析为其返回值

所以,

 $('.layout-item-button').click(layoutItemButtonClick())
布局项按钮的返回值单击
(它是
未定义的
)传递到
。单击

 $('.layout-item-button').click(layoutItemButtonClick())
将函数对象本身传递给
。单击


我得到一个
元素未定义
错误

这是正确的,因为
元素
未在
layoutItemButtonClick
可访问的范围中定义。它仅在
DOMContentLoaded
事件处理程序中定义

您必须将
元素
作为参数传递给
layoutitembutton单击
。因此,函数应该声明为

export const layoutItemButtonClick = function(element) { ... }
现在我们需要调用
layoutitembutton单击
,这样
这个
引用被单击的元素,我们将
元素
作为参数传递。我们可以使用
。调用

$('.layout-item-button').click(function() {
    layoutItemButtonClick.call(this, element);
});

但是,不需要在
layoutItemButtonClick
内使用
。我们可以将触发事件的元素设为显式参数:

 export const layoutItemButtonClick = function(trigger, element) {
   const selectedLayout = trigger.dataset.layout.split("")
   doQqthing(element);
 };
并称之为

$('.layout-item-button').click(function() {
    layoutItemButtonClick(this, element);
});

@伯吉修好了!对不起:)