-1

コード 1

<!DOCTYPE HTML>
<html>
<body>
<link type="text/css" rel="stylesheet" href="example.css">
<div class="d1">1  
    <div class="d2">2
        <div class="d3">3 
        </div> 
    </div>
</div>
<script>
var divs = document.getElementsByTagName('div')
for(var i=0; i<divs.length; i++) {
  divs[i].onclick = function(e) {
    e = e || event
    var target = e.target || e.srcElement
    this.style.backgroundColor='yellow'
    alert("target = "+target.className+", this="+this.className)
    this.style.backgroundColor = ''
  }
}
</script>
</body>
</html>

コード 2

<html>
<body onkeypress = "show_key(event.which)">
<form method="post" name="my_form">
The key you pressed was:
<input type="text" name="key_display" size="2"/>
</form>
<script type="text/javascript">
function show_key ( the_key )
{console.log(the_key);
       document.my_form.key_display.value = String.fromCharCode ( the_key );
}
</script>
</body>
</html>

質問:

1. コード 1 では、 に変更function(e) {e = e || eventfunction(a) { e = a || eventても動作しますが、コード 2 では、 に変更show_key(event.which)show_key(e.which)ても動作しません。なぜですか?

function(e){}2.やjsでよく見かけますfunction(event)が、同じですか?このように使用できますか:function(a){}またはfunction(b){}?

4

2 に答える 2

3

識別子は JavaScript では特別なものではありません。その意味を変更することなく、関数の引数で自由eventに置き換えることができます。eab

ただし、変数の名前を変更すると (それがそうであるかどうかに関係eventなく)、関数の外側にいくつかの影響があります。新しい名前は、外側のスコープ (つまり、関数を囲むコード) で同じ名前の変数を隠す可能性があり、内側の関数は変更する必要があります。も変わりました。

コード 2では、ブラウザーはonkeypressイベント ハンドラーを実行する前に、という名前のローカル変数を作成します<body onkeypress="show_key(event.which)">。これは、キーが押されるたびにその関数を作成して呼び出すようなものです。関数の引数の名前は常にで、変更できないので、その意味で特別です。eventfunction(event) { show_key(event.which); }event

于 2013-06-25T09:14:09.240 に答える