&引用;onclick";及;这";在javascript中

&引用;onclick";及;这";在javascript中,javascript,html,onclick,this,onclicklistener,Javascript,Html,Onclick,This,Onclicklistener,我很困惑: 为什么使用inline onlick,我们必须编写onclick=“hello()”,但在JS中,我们应该编写btn.onclick=hello或btn.addEventListener('click',hello) 对于常规函数,为什么在内联onlick中,“this”指窗口,而在js调用中,“this”指按钮 我不明白最后两个按钮 根据w3school的说法,在函数中,这是指全局对象。 在常规函数中,this关键字表示调用函数的对象,可以是窗口、文档、按钮或其他任何对象。

我很困惑:

  • 为什么使用inline onlick,我们必须编写onclick=“hello()”,但在JS中,我们应该编写btn.onclick=hello或btn.addEventListener('click',hello)

  • 对于常规函数,为什么在内联onlick中,“this”指窗口,而在js调用中,“this”指按钮

  • 我不明白最后两个按钮

根据w3school的说法,在函数中,这是指全局对象。

在常规函数中,this关键字表示调用函数的对象,可以是窗口、文档、按钮或其他任何对象。

const arrayBtn=document.querySelector(“.arrowFunc”);
const regBtn=document.querySelector(“.regFunc”);
hello=()=>console.log(“我是箭头函数”+这个);
函数hiii(){
log(“我是常规函数”+这个);
}
arrayBtn.addEventListener(“单击”,您好);
regBtn.addEventListener(“单击”,hiii)
这将调用带有内联onclick的arrow函数
这将调用带有事件侦听器的arrow函数
这将使用内联onclick调用常规函数
这将使用事件侦听器调用常规函数
按钮
按钮
内联
中的文本
hello()
实际上是一个小型javascript程序本身-您永远不应该使用它,它是一种过时的老式方式,可以让任何东西工作,应该忘记它

相反,javascript中的正确方式如下所示:

function hello() {}
button.onclick = hello
其中
hello
是函数名(不是javascript程序)

至于为什么
这个
是当前按钮?所有函数都可以用不同的
调用此

如果需要,可以使用不同的
this
调用
hello
函数

hello.call({turkey: true})
这就是调用
hello
并提供
{turkey:true}
作为
这个
对象的方式

html元素以元素作为
this
对象调用事件处理程序是标准的

这个
值欢呼。
  • 箭头函数捕获并始终使用其词法
    值,即在计算其值时有效的值。计算通常发生在执行赋值操作时,或在计算参数列表中包含箭头函数的函数调用的参数值时

    • 箭头函数不能用作构造函数
  • 称为构造函数的非箭头函数使用(或在扩展类时)将正在构造的对象视为其
    此值

  • 绑定函数保存并使用作为另一函数的第一个参数提供的
    此值

    • 如果将绑定函数作为构造函数调用,则会忽略其保存的
      值,但这种情况非常罕见,可以将其视为边缘情况,并且非常罕见

    • 绑定arrow函数对其
      值没有影响,但可用于预定义一组参数值

  • 使用其或对象方法调用的函数从提供给
    call
    apply
    的(第一个)
    thisValue
    参数中获取其
    this
    值,具体取决于JavaScript模式:

    • 在严格模式下,
      null
      undefined
      thisValue
      提供的值用作函数的
      this
      值。但是,在进行调用之前,
      null
      undefined
      将替换为
      window

    • 可以使用这些方法调用箭头函数和绑定函数(例如提供参数),但使用它们自己记录的
      this

  • 如果上述规则均不适用,则作为对象方法显式调用的函数将对象用作其

    例如,以电话形式

    someObject.methodName( optionalArgumentList)
    
    如果方法是常规函数,则
    methodName
    中的
    指的是
    someObject

  • 在严格模式下,非限定函数调用中的
    this
    的默认值为
    未定义
    。在草率模式下(可以追溯到JavaScript首次引入时)
    这是
    窗口
    。用于演示:

  • 函数a(){
    “严格使用”;
    log(“在严格模式下,默认为”,this);
    };
    设b=函数(){
    log(“但在非严格模式下,默认为”,
    这个===窗口?“窗口”:这个
    );
    }
    a();//未定义
    
    b();//window
    即使在做了多年的开发人员之后,我也对这一点感到困惑!此外,尝试将MDN而不是W3Schools链接为源。它更正式。有什么需要理解的?您已经编写了如何解释此
    上下文
    在常规函数中,在对象的方法(函数)内,指的是对象,在事件的情况下是元素。因此,分配给元素的
    onclick
    的函数是方法,按钮是对象
    在箭头函数中的作用域一直延伸到上一个作用域所在的位置,如果不在类或构造函数中,则为全局作用域。请注意,构造函数是一个函数。它只有在调用
    new
    时才成为对象。