导航栏

js学习(五)--函数function()、for...in、函数中的方法,arguments

1.函数的简介

函数也是一个对象
函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)
使用typeof检查一个函数对象时,会返回function

var fun = new Function();

  • 调用函数语法
    函数对象()
    fun();
    当调用函数时,函数中封装的代码会按照顺序执行

很少使用构造函数的方式来创建一个对象

使用函数声明来创建一个函数

语法:

function 函数名([形参1,形参2。。。形参N]){
      语句...
}

function fun2(){     //匿名函数

}

在函数内部还可以声明函数
function fun3(){
      function fun4(){
            alert("我是fun4");
      }
      return fun4();
}

使用函数表达式来创建一个函数

var 函数名 = function([形参1,形参2,...形参N]){
      语句。。。
};

var fun3 = function(){
      console.log(“****”);
};
fun3() 调用函数
fun3 函数对象

2.函数的参数

可以在函数的()中来指定一个或多个形参
函数的实参可以是任意数据类型
实参可以是对象,也可以是一个函数

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

调用函数时解析器不会检查实参的类型
所以要注意是否有可能会接受到非法的参数,如果有可能则需要对参数进行类型检查

调用函数时,解析器也不会检查实参的数量,多余的实参不会被赋值
如果实参的数量少于形参的数量,这没有对应实参的形参将是undefined

3.函数的返回值

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

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

返回值的类型

返回值可以是任意的数据类型,也可以是一个对象,函数

将fun4函数对象作为返回值返回
function fun3(){
      function fun4(){
            alert("我是fun4");
      }
      return fun4();
}

4.立即执行函数

函数定义完后立即执行,并只被调用一次
(function(){
      alert("我是一个服务函数");
})();

(function(a,b){
      console.log("a = "+a);
      console.log("b = "+b);
})(123,456);

5.方法

var obj = new Object();

obj.name = "孙悟空";
obj.name = 18;

obj.sayName = function(){
      console.log(obj.name);
};
obj.sayName();

对象的属性也可以是函数
如果一个函数作为一个对象的属性保存
那么我们称这个函数是这个对象的方法
调用函数就说调用这个对象的方法

方法和函数只是名称上的区别没有其他的区别

调方法
obj.sayName();
调函数
fun();

6.枚举对象中的属性

for ... in 语句 ==类似于java的for each==

for(var 变量 in 对象){

}

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

关于取值的地方和java还是不一样的

7.函数中的方法 (P79)

call()和apply()
都是函数对象的方法,需要通过函数对象来调用
当对函数调用call()和apply()都会调用函数执行
fun.apply();
fun.call();
fun();
这三个效果其实是一样的

  • 在调用call和apply()可以将一个对象指定为第一个参数,这个对象将会成为函数执行时的this
    fun()的this是window
    call()和apply()指定是哪个对象就是哪个对象为this
    fun.call(obj);

  • call()方法可以将实参在对象之后依次传递
    fun.call(obj,2,3);

  • apply()方法需要将实参封装到一个数组中统一传递
    fun.apply(obj,[2,3]);

this的情况
1.以函数形式调用时,this永远都是window
2.以方法的形式调用时,this是调用用方法的对象
3.以构造函数的形式调用时,this是新创建的那个对象
4.使用call和apply调用时,this是指定的那个对象

8、arguments(P80)

在调用函数时,浏览器每次都会传递进两个隐含的参数
1.函数的上下文对象this
2.封装实参的对象arguments

  • arguments是一个类数组对象,它可以通过索引来操作数据,也可以获取长度
  • 在调用函数是,我们所传递的实参都会在arguments中保存
function fun(){
      console.log(arguments.length);
}
arguments.length就是实参的个数
arguments[0];可以将参数取出

arguments的属性callee

这个属性对应的函数对象,就是当前正在指向的函数对象

function fun(){
      console.log(arguments.callee == fun);//true
}
posted @ 2020-12-26 18:01  RickZ  阅读(280)  评论(0编辑  收藏  举报