最近没事看了下类似淘宝,京东的前台源码,发觉自己基本看不懂,硬着头皮看了些,也看得不是很明白,大概总结了下看不懂的原因,
1, 我是几个月前报的培训班培训出来的,JS的基础,太薄弱了,基本都是以JAVA的基础来看的JS,其实JS本身也有很多特性的,所以在代码中遇到这些就看不懂了,例如:像JS最基本的一些数据类型都不知道是怎么回事,如define是什么,NaN是什么,都有什么特性,都不懂;
2, 形式上很灵活,就拿很基本的函数定义来说吧,JS定义函数的形式有好几种,有些方式定义函数会立即执行,还有别的方式定义函数不会立即执行,开始,这些都分不清,所以就读不懂了;
3, JS的要求并不严格,如类型是弱类型,分号经常是可有可无的,而且经常会压缩空格之类的,使得代码紧凑,很难读,变量的起名也经常就用一个字母来表示,没有什么函数,可读性很差,函数的调用之类不会像JAVA代码一样,用快捷键再一点就可以看到方法的定义了,但JS就不行了,而函数定义,而使用又经常不在一起,所以读着吃力。
这篇文章我就简单把JS方法定义方式总结一下:
1. 最简单的声明方式,如下代码所示,定义了一个名为a的函数,不会执行,需要用a()调用才会执行。
代码:
<span style="white-space:pre"> </span><script type="text/javascript">
function a()
{
alert(123);
}
</script>
2. 定义匿名函数,如下代码所示,定义了一个匿名函数,然后把方法赋值给一个变量,这种和第一种方式的区别是,第一种可以在声明前调用方法,而这种方式则不可以,
代码:
<span style="white-space:pre"> </span><script type="text/javascript"> var a = function() { alert(123); } </script>
3. 定义一个匿名函数并立即执行,
代码:
<span style="white-space:pre"> </span><pre name="code" class="javascript"><script type="text/javascript">
(function(){
alert(123);
})();
</script>
这种方式,还可以把后面括号里放一些参数,这样,后面括号里的变量值就可以对应传给函数的参数列表中的参数了
代码:
<span style="white-space:pre"> </span><script type="text/javascript">
(function(a,b){
alert(a+b);
})(1,2);
</script>
使用jQuery的$时经常会发生jQuery的$与其他框架的$使用冲突,常常就会使用上述方式来避免发生冲突
代码:
<span style="white-space:pre"> </span><script type="text/javascript">
(function($){
alert(a+b);
})(jQuery);
</script>
4.我要说的第四种严格说来这并不算是定义函数的一种方式
代码:
<span style="white-space:pre"> </span><script type="text/javascript">
$(function(){
<span style="white-space:pre"> </span>$("#myinput").val(234);
<span style="white-space:pre"> </span>})();
</script>
这种写法其实是添加document.ready事件,其等价于以下几种写法
代码:
<span style="white-space:pre"> </span><script type="text/javascript">
$().ready(function(){
$("#myinput").val(234);
})();
</script>
<span style="white-space:pre"> </span><script type="text/javascript">
$(document).ready(function(){
$("#myinput").val(234);
})();
</script>
<span style="white-space:pre"> </span><script type="text/javascript">
document.ready = function(){
$("#myinput").val(234);
};
</script>
而这种写法的好处就在于由于是添加document.ready事件,所以函数会在document加载完成后执行,而我们经常习惯把JS代码写在body前,而此时如果使用第四种定义方式定义并执行函数,并且在函数里需要对body里的对象进行操作时就会发生错误,因为document还没加载,所以实际上是取不到对象的,这一点尤其需要注意。
另外还要说明的一点是我们有时还会使用<body οnlοad=”load()”>定义onload事件,这个事件的执行是在document.ready事件之后的.
5.补充一种,
用 Function 类直接创建函数的语法如下:
var function_name = new function(arg1, arg2, ..., argN, function_body)
在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。
注意:尽管可以使用 Function 构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作 Function 类的实例。
<span style="white-space:pre"> </span><script type="text/javascript">
var a = new Function()
{
alert(123);
}
</script>
编程技术交流请加QQ群:点击链接加入群【Just Do IT】:https://jq.qq.com/?_wv=1027&k=478lBF3