在方法内定义一个函数,把它作为参数传入另一个全局函数时,它为什么能够执行呢?不存在作用域的问题吗?
<body>
<input type="button" value="点击" />
<script>
function t(x){ //定义一个全局函数t
alert(x);
x('哈哈');
}
window.onload=function(){
var oBtn=document.body.children[0]; //得到button
oBtn.onclick=function(){ //button点击的时候
t(function(c){ alert(c); });
//运行结果:先弹出 function(c){ alert(c); }
//再弹出哈哈
};
};
</script>
</body>
下面我的理解(不知道想的对不对):
1.在oBtn.onclick的方法中,定义匿名函数function(c){ alert(c); },作为参数传入全局函数t。
2.函数是引用类型的数据,所以全局函数t 的参数x 保存的是 匿名函数function(c){ alert(c); } 在内存中的一个地址。
3.通过地址来调用这个匿名函数function(c){ alert(c); }。
我迷惑的地方:
匿名函数function(c){ alert(c); }是在oBtn.onclick方法中定义的,它是一个局部的数据。
为什么调用t(function(c){ alert(c); })时,全局函数t的参数x可以得到匿名函数function(c){ alert(c); }的引用?
局部数据不是仅仅在函数内可以访问吗?
function本质是一个对象. alert一个对象好像默认应该调用的toString 然后执行函数本事