前面记录了声明函数的一些概要,当然并非如此只言片语就能讲到精髓所在,下面便来说说执行函数时所发生的一些事情。
当我们普通执行一个函数的时候,就像这样:
1 function fn(){ 2 //这是代码块 3 } 4 fn()
这种情况我们普遍称之为函数,如下面的
1 var obj = { 2 fn:function(){ 3 //这是代码块 4 } 5 } 6 obj.fn()
在对象中调用的函数,我们称之为方法,好了,下面进入正题。
我们在执行一个函数/方法的时候都做了什么;
函数在javascript中,属于引用类型的数据,所以在执行函数的时候,首先会找到这个函数的引用地址,当然这个过程中会判断与之绑定的标识符的类型是否为一个function,
如果是,则会执行代码块,如果不是,浏览器则会报一个xxx is not a function的类型错误,如果没找到,当然就会报一个为定义的错误not define;
在执行过程中函数/方法会有一个活动对象,我们假设这个活动对象就是一个空对象,并且里面所有的属性/方法都不需要这个空对象做为前缀就可以调用;
function fn(p1,p2){ {//多有的变量都放在这个活动对象中 argments:[p1,p2], p1:unfined, p2:unfined, x:55,
this://window,this的值根据执行环境变化
} var x = 55 } fn()
当然,以上代码中就有许多是个人遐想了,这样更方便我理解活动对象这个东西,所以,一个变量或者说标识符在作用域链上查值的过程,就是在一个个活动对象上查值的过程,查到最后window对象上,如果没有查到,那么就会报一个not define;
原文:http://www.cnblogs.com/Amy-so/p/4987013.html