JavaScript(三)函数 对象 构造函数

函数

定义语法:

	   function 函数名(){ 
	        代码段 
	    }

function是一个关键字,函数名自定义,定义规则和变量的定义规则相同

函数的调用:

       语法:
           函数名()

函数的优点:

  • 实现了代码的可重用性
  • 实现了模块化编程

带参数的函数:

  • 函数代码中会发生改变的值用变量来代替,入口是声明函数时的小括号
  • 调用函数的时候,需要给参数赋值

获取函数的实参

  • 函数中还有一个关键字arguments可以获取到所有的实参
  • 如果有形参的话,也是一样的,通过下标取到其中的每一个值

匿名函数(赋值式的函数)

定义:

语法:
    function(){ 
        代码段
    }

调用1:

语法:
    (function(形参){ 
        代码段
    })(实参)            

匿名函数的调用是在定义的时候调用,很简单,就是在大括号后面加小括号就是调用。

调用2:

语法: 
# 定义
    var fun = function(){ 
        代码段 
    } 
# 调用
    fun() 

也可以将匿名函数赋值给变量,调用的时候使用变量名来调用。

调用3:

<style>
 #myid{
	 width:200px; 
	 height:200px; 
	 background:#f00; 
 }
</style> 
<body>
 <div id="myid"></div> 
</body> 
<script> 
 var oDiv = document.getElementById("myid");
 oDiv.onclick=function(){ 
     alert(123); 
 }
</script>

还可以通过事件来调用匿名函数。

变量的声明提升

浏览器中有一段程序专门用来解析js代码, 叫做js解析器。js解析器在执行js代码的时候,分两步进行:

  1. 预解析js代码
    : 预解析的过程,就是查找代码中的var和function这两个关键字,找到以后,将变量和函数存到了一个地方,就叫仓库吧,并给他们赋一个初始值,变量的初始值为undefined,函数的初始值为代码段
  2. 开始按顺序一行一行解读代码
    : 解读代码的时候,仓库中的变量和函数的值会随着代码的解读而发生变化,也就是变量的赋值和函数的调用。预解析分为变量的预解析和函数的预解析,也就是代码在执行之前先进行解析,将变量和函数的声名放在当前作用域
    的最前面

总结:

  1. 用var关键字声名的变量,将变量的声名提升到当前作用域的最前面,赋值不提升
  2. 自定义的函数整体提升到当前作用域的最前面
  3. 函数同名,后面的会覆盖前面的
  4. 变量和函数同名,函数优先提升

例1:

// 思考题:
var a = 4; 
console.log(a); //4
a = 6; 
console.log(a); //6
function a() { 
    console.log('哈'); 
}
a(); //报错
a = 10; 
console.log(a);

为什么报错,因为变量和函数同名,函数优先提升,所以相当于函数在最前面,之后a又重新定义,赋值,不再是函数,所以报错。如下图所示:

// 如图所示
function a() { 
    console.log('哈'); 
}
a(); //函数优先提升,所以造成a先是函数,后来被重新定义赋值,成为变量,不再是函数,所以报错。
var a = 4; 
console.log(a); //4
a = 6; 
console.log(a); //6
a = 10; 
console.log(a); //10

例2:

// 思考题
fn3(); 
console.log(c); //9
console.log(b); //9
console.log(a); //报错,a找不到,也就是未定义
function fn3() { 
    var a = b = c = 9; 
    console.log(a); //9
    console.log(b); //9
    console.log(c); //9
}

为什么a会报错,原因在于var a = b = c = 9; 在这里面,除了a是局部变量外,其他的都是全局变量 ;所以a在全局中未定义,被报错!
类似的写法有好多:

  • var a=b=1中的变量b会成为全局变量
  • var a=1,b=1中的a、b变量都为局部变量
  • var a=9,b=9; c=9s中的a、b变量都为局部变量,c会成为全局变量

形参和实参

  • 声明函数时候带进去的那个参数叫形参
  • 调用函数的时候给形参进行赋值的实际值是实参

带返回值的函数

// 语法:
       function 函数名(){ 
           return 返回的结果 
       }

将结果返回的关键字是return,这样可以将函数运算的结果返回给调用者

  • 带有返回值的函数,当调用函数的时候得到一个结果,这个结果可以参加运算,也可以进行赋值。
  • 带有返回值的函数,当函数执行到return关键字的时候,函数就终止了,在return后面的代码不会运行。

return的作用:

  1. 终止代码继续运行
  2. 在函数中返回一个内容

作用域

  • 函数外边的变量叫做全局变量,可以在函数外面和函数里面使用。
  • 函数内部的变量叫做局部变量,只能在函数内部使用。
  • 有一种情况比较特殊,函数内部声名的变量也是全局变量。

总结:

  1. 函数外边使用的变量是全局变量,要在全局内找,可以是函数外部声名的变量也可以是函数内部的隐式声名的
    变量。
  2. 函数内部使用的变量是局部变量,先从局部找,如果局部没有,再从全局中找

递归函数

递归函数就是在函数中调用自己。

// 求10的阶和,即:10+9+8+...+1 
function facSum(num){ 
	if(num == 1){ 
	    return 1; 
	}
	return num + facSum(num-1); 
}
var res = facSum(10); 
console.log(res); // 55

对象

对象的创建

     var obj = {}; // 创建了一个空对象      

这是以json对象的形式创建的对象
大括号中放的是属性,属性名和属性值之间用冒号,可以有多个属性,每个属性之间用逗号隔开,例:

var obj = { 
		属性1:1, 
		属性2:2 
}

例:定义一个人的信息:

var obj = { 
	name:'张三', 
	age:12, 
	sex:'男', 
	height:157, 
	weight:123 
}

访问

获取这个对象中的某个属性:

//  对象.属性名
console.log(obj.name);

方法

对象具备两个内容,一个是属性,一个是方法,属性用来描述一个对象的特征,方法用来描述一个人的行为。在对象中,把值是函数的属性,就叫做方法。
方法的访问和属性是一样的: 对象.属性名

操作

对象的属性和方法除了可以访问之外,还可以赋值:

var obj2 = { 
	name:'王五', 
	study:function(){ 
	            console.log("在学习"); 
	} 
}
obj2.age = 15; 
console.log(obj2); 
obj2.eat = function(){ 
    console.log("在吃饭"); 
}
obj2.eat();

如果赋值的属性名不存在,则是给对象增加属性,如果对象的属性存在,则是给对象修改属性。增 改

构造函数(简单了解)

使用new关键来创建对象的函数,叫做构造函数。
任何函数都可以是构造函数:

function fn(){ 

}
var obj = new fn(); 
console.log(obj); // object

嗯,为了巩固知识,写了下来,希望有所帮助,加油!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值