函数

本文详细介绍了JavaScript中的函数,包括函数的创建方式(函数字面量、函数声明、匿名函数)、调用方法(普通调用、new构造函数调用)以及函数的参数。重点讲解了函数的内部属性,如arguments对象及其length和callee属性,以及this关键字的动态绑定。同时,通过示例展示了this的确定时机以及不同调用场景下this的指向。最后,讨论了函数作为值和返回值的使用,并介绍了call和apply方法用于改变函数内部this的指向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数允许我们封装一系列代码来完成特定任务。当想要完成某一任务时,只需要调用相应的代码即可。方法(method)一般为定义在对象中的函数。浏览器为我们提供了很多内置方法,我们不需要编写代码,只需要调用方法即可完成特定功能。在构造函数时,最好将首字母大写,函数其实也是一个对象。

创建

  • 函数字面量
    • var say=function(){}
  • 函数的声明
    • function say(){}
  • 解析时,先解析函数的声明,在解析使用var操作符声明的变量,但不赋值。
  • 匿名函数
    • function (){} 需要立即执行(function ()){}()

函数的调用

  • 函数名(参数)
  • new 函数名():new调用的函数为构造函数

函数的参数

  • 形式参数(形参)
  • 实际参数(实参)
  • function say(a,b){ console.log(a+b) ;} a,b为形参
  • say (1,2) 1,2 为实参可以和 实际参数个数不一致
  • js中没有重载概念,只要函数名相同,即为重写

函数的内部属性

1)只有在函数内部才能访问的属性。

2)arguments:类数组对象,用来保存当前拥有arguments对象的函数的实际参数列表,length属性表示实际参数的个数,callee属性表示从函数内部指向当前函数(类数组对象)

[1,2,3,4]数组的下标,从0开始

function say(a,b){

//1.var a ;var b; 2. 1-->arguments[0] 2-->arguments[1] 3--->arguments[2] 3.arguments[0]-->a arguments[1]--->b

}

say(1,2,3);

计算1!+2!+3!...+10!

var result=0;

for (var i=1;i<=10;i++){

result+=sum(i)

}

3)this: 是函数赖以生存的环境对象

this何时确定:当拥有当前this的函数被调用时确定

谁调用当前拥有this的函数值,那么this就指向谁

下面展示的代码 `this调用变量`。
var o={
  2   name:'text',
  3   gender:'men'
  1 var o={
  2   name:'text',
  3   gender:'men'
  4 }
  5 var age=10;
  6 function say(){
  7   var age=20;
  1 var o={
  2   name:'text',
  5 var age=10;
  6 function say(){
  7   var age=20;
  1 var o={
  2   name:'text',
  5 var age=10;
  6 function say(){//1001
  7   var age=20;
  8   console.log(this.age);
  9 }
  1 var o={
  2   name:'text',
  3   gender:'men'
  4 }
  5 var age=10;
  6 function say(){//1001
  7   var age=20;
  8   console.log(this.age);
  9 }
 10 var o={
 11   name:'lisi',
 12   gender:'men',
  2   name:'text',
  3   gender:'men'
  4 }
  5 var age=10;
  6 function say(){//1001
  7   var age=20;
  8   console.log(this.age);
  9 }
 10 var o={
 11   name:'lisi',
 12   gender:'men',
 13   age:30,
 14   say:say,//1001
 15   getSay:function(fn){//fn:1001
 16     fn()//this-->window:10
 17   },
 18   sayHello:function(){
 19     console.log(this.age);//30
 20     return function(){
 21       return this.age
 22     }
 23   }
 24 }
 25 //1.say()
 26 say();//window.say();this--->windoow:10
 27 //2.o.say()
 28 o.say();//this-->o:30
 29 //3.o.getSay();
 30 o.getSay(say);//this-->window:10
 31 //4.o.sayHello()
 32 console.log(o.sayHello()());//this-->window:10

作为值的函数和作为返回值的函数

1.作为值的函数

由于函数名本身就是变量,所以函数可以当做值来使用(参数,返回值)。

2.作为返回值的函数

函数的属性

say.length:返回形式参数的个数

调用函数:

修改了函数内部this值的指向

say.call(this,实际参数列表)

say.apply(this,[实际参数列表])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值