2017-02-15 70 views
1

我的问题是关于这个html代码(我在Chrome 56中工作)。这个Javascript事件处理函数参数在哪里定义?

<html> 
 
<body> 
 
<input type='range' min='0' max='5' step='0.1' oninput="console.log(value)"> 
 
</body> 
 
</html>

此代码按预期工作 - 移动滑块控制导致一堆被打印到控制台的值。

显然value变量是在运行console.log(value)的范围内定义的。我的主要问题是,这个value变量来自哪里?另外,还有其他一些像它那样的变量,“就在那里?”是否有这些变量的文档,是否依赖他们在那里是一个好习惯?

+0

它指的是输入字段的“value”属性,同样“this”会引用html标签本身并传递其所有值,您可以传递任何html属性,包括“event” - 数据 –

+0

好的,但是为什么/如何?它看起来像一个“隐含的'this'”,我不认为JS有。这种行为是Javascript的一部分,还是由浏览器额外完成的? – gnarledRoot

+0

http://jibbering.com/faq/names/event_handler.html – Bergi

回答

1

所以回调是在输入字段的上下文中完成的。然后,“value”变量实际上就是输入的“value”属性,相当于this.value ...

这给我们带来了第二个问题:你想看看在这种情况下“this”有什么其他属性?在你的处理器试试这个:

oninput="console.log(this)" 

您的开发者控制台会吐出一个对象,你就可以检查。

希望这会有所帮助!

+0

什么让我写'console.log(value)'而不是被迫写'console.log(this.value)'? – gnarledRoot

+0

这就是javascript中的变量范围。如果你要定义'var value ='nothing';那么这将成为你当前的“值”变量。但是由于处理程序中没有定义局部变量,因此它将上下文视为“this”。在这种情况下,“this”是输入字段。你也可以试着用'console.log(window.value)'' – MacPrawn

+0

'来访问窗口的“value”属性(除非你自己设置它),这个属性是不存在的(如C++中那样)以为Javascript没有。我找不到引用解释JS“为这个上下文寻找”this“,任何指针?仍然觉得浏览器本身正在执行一个额外的步骤(不是纯JS的一部分),将'this'属性复制到处理程序的作用域中 - 但是也找不到这个参数。 – gnarledRoot

相关问题