js中的function(e){}和function(event){}之间是否有任何区别?

时间:2013-06-25 09:11:21

标签: javascript

代码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 || event更改为function(a) { e = a || event,它仍然有用,但在代码2中,如果我将show_key(event.which)更改为show_key(e.which),则会不行,为什么?

2.我经常在js中看到function(e){}function(event),它们是否相同?我可以这样使用:function(a){}还是function(b){}

2 个答案:

答案 0 :(得分:3)

标识符event在JavaScript中并不特殊,您可以在函数参数中使用eab等替换它,而不会更改其含义。< / p>

但是,重命名变量(无论是否为event)在函数外部会产生一些影响:新名称可能会影响外部作用域中同名变量(即函数周围的代码) ,内部功能也必须改变。

Codes 2 中的<body onkeypress="show_key(event.which)">中,浏览器在运行 onkeypress 事件处理程序之前创建名为event的本地变量。这就像创建function(event) { show_key(event.which); }然后每按一次键调用该函数一样。函数参数的名称始终为event,您无法更改它,因此从这个意义上讲它是特殊的。

答案 1 :(得分:0)

这是一个函数声明:

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

您可以将其翻译为:;

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

虽然arguments是您在调用函数时提供的参数数组:

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是一个已经声明的变量,它不是。但是,eventwindow对象的属性(至少在Internet Explorer中),这意味着它可以从任何地方访问。