&引用;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”指按钮
- 我不明白最后两个按钮
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
时才成为对象。