JavaScript函数的定义与执行(2)

个人理解h的作用域链:g的活动对象->f的活动对象->window对象(因为此处h代表的是返回的"g()"函数,既然是定义为准,就应该是定义"g()"函数时确定,所以 h.scope chain = g.scope chain )

网上参考h的作用域链:h的活动对象 ->f的活动对象->window对象

(2)h的作用域在执行(alert( h ( ) )的时候确定:

h的作用域链:h的活动对象->alert的活动对象->window对象。

 结果:(1)应该输出1 (2)应该输出undefined  。

实践证明函数的作用域是在定义这个函数的时候就已经确定了!

 

补充:Javascript的垃圾回收机制

在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

function a(){

var i = 0;

var b = function(){ alert(++i);}

return b;

}

var c = a();

c();

以上代码如果没有return b; 当函数a执行完后就会被回收!b引用a,而b不再被第3者c所引用(没有返回数据给c),那么这两个互相引用的对象也会被回收。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0cfebb2bd6cb5d7c9cbddc8197448830.html