<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>理解 this 是谁</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no" />
    <style>
        div {border: 1px solid #aabbcc; border-radius: 5px; width: 130px; text-align: center;}
    </style>
    <script>
        function clickme() {alert("this 是 " + this.id);}
        function clickme2(this2) {alert("this2 是 " + this2.id);}
    </script>
</head>

<body>
    <br /><!-- 上下文语境相同,此时的 this 就是 div_1 -->
    <div id="div_1" onclick="alert('this 是 ' + this.id);">div_1(点我)</div>

    <br /><!-- 将函数 clickme 作为 div_2 的方法,函数中 this 就是 div_2 -->
    <div id="div_2">div_2(点我)</div>
    <script> div_2.onclick = clickme; </script>

    <br /><!-- 不是调用函数的正常方法! -->
    <div id="div_3" onclick="clickme;">div_3(点我)</div>

    <br /><!-- 直接调用函数,上下文语境改变,函数中 this 未知! -->
    <div id="div_4" onclick="clickme();">div_4(点我)</div>

    <br /><!-- 将 this(div_5) 做为参数传递,函数中 this 就是 div_5 -->
    <div id="div_5" onclick="clickme.call(this);">div_5(点我)</div>

    <br /><!-- 将 this(div_6) 做为参数传递,函数中 this2 就是 div_6 -->
    <div id="div_6" onclick="clickme2(this);">div_6(点我)</div>
</body>

</html>