Javascript js中的函数(e){}和函数(event){}之间有什么区别吗

Javascript js中的函数(e){}和函数(event){}之间有什么区别吗,javascript,Javascript,代码1 代码2 <!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> <

代码1

代码2

<!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>
问题:

1.在代码1中,即使我将function{e=e | | | event改为function{e=a | | | event,它仍然工作,但在代码2中,如果我将show_keyent.which改为show_keye.which,它不工作,为什么

2.我经常在js中看到functione{}或functionevent,它们是一样的吗?我可以这样使用:functiona{}或functionb{}?

标识符事件在JavaScript中并不特殊,您可以在函数参数中自由地用e、a或b等替换它,而不改变其含义

但是,重命名变量,无论其是否为事件,都会在函数外部产生一些后果:新名称可能会在外部范围(即围绕函数的代码)中隐藏同名变量,并且内部函数也必须更改


在代码2中,浏览器在运行onkeypress事件处理程序之前创建名为event的局部变量然后在按下某个键时调用该函数。函数参数的名称始终为event,您无法更改它,因此从这个意义上讲它是特殊的。

这是一个函数声明:

<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>
你可以把它翻译成:

function xy(a) {
    return a + 1;
}
While arguments是调用函数时提供的参数数组:

function xy() {
    var a = arguments[0];
    return a + 1;
}
您可以随意命名,因为它只是一个变量声明。这就是为什么以下代码同样有效:

xy(1, 2);   // -->  arguments = [1, 2]
当您像这样调用函数xy时:

function xy(b) {
    return b + 1;
}
这意味着您将变量a的值传递给xy。这就是为什么在函数调用之前必须声明变量a的原因:

xy(a);
function(a) {e = a || event}
如果将函数调用中的a更改为b,它将失败,因为b未定义:

var a = 4;
xy(a);
这就是为什么你可以改变这个

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

function(e) {e = e || event}
show_key(event.which)
但如果您尝试更改此函数调用:

xy(a);
function(a) {e = a || event}
为此:

function(e) {e = e || event}
show_key(event.which)

它希望e是一个已声明的变量,但它不是。然而,事件至少在internet explorer中是窗口对象的属性,这意味着它可以从任何地方访问。

我没有阅读您的代码,但问题是:参数名称只是不同。仅此而已。但为什么对于代码2,我不能更改show\u keyevent.which to show_keye.which?@user2507818因为您混合了全局对象事件的名称,它实际上是一个取自窗口对象的参数;您不能用show_key函数的形式参数的名称来更改它。如果您只是将事件传递给body属性中的函数,那么您可以自由更改参数的名称呃,要么访问event,要么访问e,然后分别访问event.which或e.which。