onClick函数"this"返回Window对象

Por*_*ori 15 javascript window function onclick this

我的JavaScript应用程序遇到了棘手的问题.

如果我写这样的元素:

<li onClick="alert(this.tagName)"></li>
Run Code Online (Sandbox Code Playgroud)

我得到"李".

但是,如果我这样做:

<li onClick="foo()"></li>
Run Code Online (Sandbox Code Playgroud)

"foo()"的位置是:

function foo(){ alert(this.tagName); }
Run Code Online (Sandbox Code Playgroud)

我得到"未定义".

我不知道"这个"应该如何适用于附加功能.但是,我感到困惑,因为"这个"没有拿起元素,但显然是默认为"窗口".我无法弄清楚为什么会这样.

有人有解释吗?

p_s*_*and 21

那是因为你没有传递引用到这个在JavaScript函数调用.在JavaScript函数中没有引用与onClick示例中相同的对象.试试这个:

 <li onClick="foo(this)"></li>

 function foo(item){ alert(item.tagName); }
Run Code Online (Sandbox Code Playgroud)

  • `this`完全取决于函数的调用方式(忽略[ES5 bind](http://ecma-international.org/ecma-262/5.1/#sec-15.3.4.5)).调用上下文(即建立范围的全局或函数上下文)是无关紧要的.如果调用没有设置`this`,则无论调用函数的位置如何都会以非严格模式默认为全局对象,并且当从任何上下文调用时,`this`可以设置为任何对象(即它具有与范围无关). (3认同)
  • `this` 与范围无关。 (2认同)