一、函数的参数


function sum(a,b){
 console.log(a+b);
}

2.调用函数时解析器也不会检查实参的数量

多余的实参不会被赋值

如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined

二、return

1.创建一个函数,用来计算三个数的和

function sum(a,b,c){

	//alert(a+b+c);

	var d=a+b+c;

return d;

}

可以使用return来设置函数的返回值

语法:return 值

return后的值将会作为函数的执行结果返回

在函数中renturn后语句不再执行;

如果return语句后不跟任何值,就相当于返回一个undefined

如果函数中不写return,则会返回undefined

//调用函数

//函数返回什么result的值就是什么

var result=sum(4,7,5);

三、实参可以是任何值

1.//定义一个函数,判断一个数字是否是偶数,如果是返回true,否则返回false

function isEven(){

	return num%2==0;
}
var result=isEven(12);
cosole.log(result);

2.定义一个函数,根据半径计算一个圆的面积,并返回计算结果

function circle(r){
	return 3.14*r*r;
}
var result=circle(4);
console.log(result);

3.创建一个函数,可以在控制台中输出一个人的信息

//可以输出人的name age gender address

实参可以是任意类型的数据类型,也可以是一个对象

当我们的参数太多了,我们就把参数封装到一个对象中,然后通过对象传递

/*function sayHello(name,age, gender, address){
	console.log("我是"+name+",今年我"+age+"岁了,");
}*/
function sayHello(o){
	console.log("我是"+o.name+",今年我"+o.age+"岁了,"+“性别”+gender);
}
var obj={
	name:"小明";
	gender:"男";
    age:18;
	address:“北京”
}

sayHello

–函数对象

–相当于直接使用函数对象

sayHello()

–调用函数

–相当于使用函数的返回值

四、返回的类型

function fun(){
	alert("函数要执行了");
	for(var i=0;i<5;i++){
		if(i==2)
{
	//使用break可以退出当前的循环
	//break;
	//使用continue用于跳过当次循环
	//continue;
	//使用return 可以结束整个函数
//return;
}
console.log(i);
}
alert("函数执行完了");
}

//函数时任意的数据类型

//也可以是一个对象、也可以是一个函数

在函数内部再声明一个函数

function fun3(){
	function fun4(){
		return{name:"沙和尚	"};
	}
}

五、立即执行函数

1.函数定义完,立即被调用,这种函数叫做立即执行函数

2.立即执行函数往往只会执行一次

(function fun4(){
		return{name:"沙和尚	"}
	})();

3.枚举对象

枚举对象中的属性
//使用for……in语句
语法:
for(var 变量 in 对象){
}

for……in语句 对象中有几个属性,循环体就会执行几次

每次执行时,会将对象中的一个属性的名字赋值给变量

for(var n in obj){
	//console.log("属性名"+n);
console.log("属性值”+obj[n]);
}

六、作用域

作用域:指一个变量的作用范围

/*

* 作用域

* - 作用域指一个变量的作用的范围

* - 在JS中一共有两种作用域:

* 1.全局作用域

* - 直接编写在script标签中的JS代码,都在全局作用域

* - 全局作用域在页面打开时创建,在页面关闭时销毁

* - 在全局作用域中有一个全局对象window,

* 它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用

* - 在全局作用域中:

* 创建的变量都会作为window对象的属性保存

* 创建的函数都会作为window对象的方法保存

* - 全局作用域中的变量都是全局变量,

* 在页面的任意的部分都可以访问的到

* 2.函数作用域

*

*/

var a = 10;
      var b = 20;
      //var c = "hello";
      //console.log(window.c);
      function fun(){
        console.log("我是fun函数");
      }
      //window.fun();
      //window.alert("hello");

七、函数作用

1.函数作用域

–调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁

–每调用一次函数,就会产生一个函数作用域,他们之间是互相独立的

–在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量

–就近原则–当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用

如果没有则向上一级作用域中寻找,知道找到全局作用域

如果全局作用域中仍然没有找到,则会报错。

在函数中访问全局变量时可以使用window调用

在函数作用域也有声明提前的特性

****使用var关键字声明的变量,会在函数中所有的代码执行之前被声明

函数声明也会在函数中所有的代码执行之前执行

2.声明提前

/*

* 变量的声明提前

* - 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),

* 但是如果声明变量时不使用var关键字,则变量不会被声明提前

*

* 函数的声明提前

* - 使用函数声明形式创建的函数 function 函数(){}

* 它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数

* 使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

*/

/*console.log("a = "+a);
    var a = 123;*/
    //fun();
    //函数声明,会被提前创建
    function fun() {
      console.log("我是一个fun函数");
    }
    //函数表达式,不会被提前创建
    var fun2 = function() {
      console.log("我是fun2函数");
    };
    fun2();

八、this

解析器在调用函数每次都会向函数内部传递一个隐含的参数

这个隐含的参数就是this,this指向的是一个对象

这个对象我们称为函数执行的上下文对象

根据函数的调用方式的不同,this会指向不同的对象

1.以函数的形式调用时,this永远都是window

2.以方法的形式调用时,this就是调用方法的那个对象