今天在项目中想重构一下JS的代码,感觉项目中的代码写得很冗余,准备封装一下,在写代码的时候思考如何去定义变量装不同的代码,所有在此复习了一下基础知识;
想到几点就写几点吧!(PS:阅读文章最好仔细看文字描述部分)
function c(a,b){
return a+b;
}
var c=function(a,b){
return a+b;
}
首先这两个代码的区别,我们可以看出这里都是函数的声明方法、其中第二项更倾向于函数表达式;
这两点有一个区别:先说第一种非匿名函数:function(){}
在代码执行之前被JS解释器加载到作用域中,这样一来就可以在编程时在定义函数之前调用这个函数。通俗一点的理解就是使用 function(){}声明的函数无论放在那个位置,他都可以被调用;
调用方式;函数名(参数) c(a,b)
第二种(匿名函数赋值): var xx=function(){}
而这一种声明方式会需要等JS解释器执行到这一步,那么这个函数才会有定义,因此如果你要在这个函数被编译之前调用它的话,它是不起作用的;
调用方式: c(a,b);
使用 var 和 不使用 var 声明的区别:
大家都知道在JS中声明一个变量通常是需要使用var去声明的,但是也可以不用var 去声明这个变量也是能够执行的,那么他们的区别是什么呢,请听我细细道来;
jscript的全局变量和局部变量的分界是这样的:
**过程体外(包括方法function,对象Object o ={})的所有变量不管你有没有加var保留字,他都是全局变量**
**而在过程体内(包括方法function(){},对象Object o={})内的对象加var保留字则为局部变量,而不加var保留字即为全局变量**
怎么理解呢,就是在方法里面function(var xx=""),或者对象里面(Object s={ ss:function(){
var xx=“”}} )
像这样的声明就属于局部,而如果是在函数外,又或者对象外,声明无论是有没有var 他都是全局变量
第三种 我称呼他为面向对象的封装
由于是Javaweb开发,所有在前端的代码编写方面用到了很多面向对象的思想,下面就来说一说;
我们知道在JS中变量是可以存放数值和函数的
var a={
b:'123',
c=function(d){
alert(d);
}
}
这就是接下来要说的简单的封装;
var alecor={};
alecor.etc=function(){
// 避免this变量的污染,赋值给一个新的变量替代;
var self=this;
self.a=function(){
alert("A");
}
self.b=function(){
alert("B");
}
}
这样就完成了一个简单的封装,之后后面怎么用,就看你们自己决定了
如果把上面的函数单独写在一个JS函数里面,那么记得在调用之前引用这个函数,不然是无法调用的,至于原因,由于表达式是等待JS引擎执行到哪里它才在哪里实例化;
使用方法
var z=new alecor.etc();
console.log(z.a());
总而言之、言而总之;JS真的很灵活;