一、函数的参数
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就是调用方法的那个对象