js 函数定义的两种方式以及事件绑定(扫盲)
一、事件(例如:onclick)绑定的函数定义放在jsp前面和放后面没影响
二、
1 $(function() { 2 function func(){}; 3 })
onclick通过如下方式绑定事件到jsp中:onclick = "func();"
由于func()在函数中声明,是局部变量,onclick找不到func(),绑定失败。
三、
function func(){};
onclick = "func();"
这样绑定没有问题,因为func()此时是全局变量,不在任何函数中。
四、
func = function(){ }; onclick = "func();"
这样绑定也没问题,另一种函数定义方式,也不在任何函数中,属于全局变量。
五、
$(function() { func = function(){ }; }); onclick = "func();"
这可以绑定成功,js中,在函数内部,不加var声明的变量是属于全局变量,所以这里func虽然放在函数中,却是全局变量,onclick可以正常触发。
六、
$(function { var func = function() { }; }); onclick = "func();"
这绑定不成功,可以和情况五比较,func变量前加了var,变成了函数内部的局部变量,所以onclick访问不到func函数,不能触发。
七、全局和局部变量:
1、外部的为全局,内部的为局部变量。
2、加var为局部变量(在方法内),不加var为全局变量(当方法内有一次使用后)
<script type="text/javascript"> var golbe="global"; test(); function test(){ var local="local"; document.write(golbe); document.write(local); } document.write(golbe); document.write(local); </script>
在上面的test方法内,当把local变量的var去掉后,local就变成了全局变量,但是在局部不使用local,则这个local作为全局是无效的。
为了验证这点,我把test方法内部唯一使用local变量的这句代码注释掉.发现在外部也打印不出来了。
总结:全局变量可以不声明var 函数内变量必须声明var,在定义全局变量时加或不加var关键字没什么影响;但在定义局部变量时如果不加var关键字javascript解释程序会将其解释为全局变量。
带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯