-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),它不起作用,为什么?

2.我经常看到function(e){}还是function(event)在js里,都是一样的吗?我可以这样使用:function(a){}还是function(b){}

4

2 回答 2

3

标识符在 JavaScript 中并不特殊,您可以在函数参数event中随意将其替换为e,a等而不改变其含义。b

但是,重命名变量(无论是否event)在函数之外会产生一些后果:新名称可能会影响外部范围内的同名变量(即围绕函数的代码),并且内部函数必须是也改变了。

代码 2<body onkeypress="show_key(event.which)">中,浏览器会在运行onkeypress事件处理程序之前创建名为的局部变量。这就像每当按下一个键时创建然后调用该函数。函数参数的名称总是,你不能改变它,所以从这个意义上说它很特别。eventfunction(event) { show_key(event.which); }event

于 2013-06-25T09:14:09.240 回答
0

这是一个函数声明:

function xy(a) {
    return a + 1;
}

你可以把它翻译成:;

function xy() {
    var a = arguments[0];
    return a + 1;
}

Whilearguments是您在调用函数时提供的参数数组:

xy(1, 2);   // -->  arguments = [1, 2]

您可以随意命名a,因为它只是一个变量声明。这就是为什么以下代码同样有效的原因:

function xy(b) {
    return b + 1;
}

当你xy像这样调用函数时:

xy(a);

这意味着您传递给xy变量的值a。这就是为什么必须a在函数调用之前声明一个变量的原因:

var a = 4;
xy(a);

如果你改变a你的函数调用b将失败,因为b没有定义:

var a = 4;
xy(b);  //where is b???

这正是你可以改变它的原因

function(e) {e = e || event}

对此:

function(a) {e = a || event}

但是如果你尝试改变它(这是一个函数调用):

show_key(event.which)

对此:

show_key(e)

它期望e是一个已经声明的变量,但它不是。event但是,它是window对象的属性(至少在 Internet Explorer 中),这意味着它可以从任何地方访问。

于 2013-06-25T09:36:56.463 回答