js预处理阶段arguments深度解剖

来源:互联网 发布:js 正则 可有可无 编辑:程序博客网 时间:2024/06/04 19:47

一.首先了解arguments内部引用

  首先先来看一个例子

function fn(a,b,a){alert(a);//3alert(arguments[0]);//1alert(arguments[2]);//3}fn(1,2,3);


知识点一: 变量名重复会取最后一个

问题一:arguments[0]为什么等于1

 


  这是一个简单的热身,再来看一个下一个例子

<script type="text/javascript">function fn(a,b,a){alert(a);//function a(){}alert(arguments[0]);//1alert(arguments[2]);//function a(){}function a(){}var a=5;}fn(1,2,3);</script>


知识点一: 预处理阶段 function  优先级最高 预处理阶段发生冲突的变量名,会被优先级高的忽略掉。

那么 var a=5 就直接被 忽略

知识点二: 函数读取中 arguments 优先级是最高的 比function 还要高,当函数出现的一瞬间其实就已经

扫描了函数fn(), 在进入函数内部的时候,arguments 之间的引用已经结束了。arguments[0]所以是

不受任何不变化的,在上一例子中就讲到,它的变量引用已经没有了。

知识点三: 进入函数内部,function 优先级最高 所以a就已经被赋值为 function a(){},arguments[2] 引用的变量a

已经被预处理,所以arguments[2]也是function(){}。


原创粉丝点击