JavaScript 函数

函数是由事件驱动的或者当他被调用执行的可重复使用的代码块。函数是包裹在花括号中的代码块,使用关键字function;当调用该函数时,就会执行函数内的代码。在JavaScript任何位置都可以调用函数。函数实际上也是对象,每一个函数都是function类型的实例,函数名实际上也是一个指向函数对象的指针。

调用函数时,往里头传递数值时,这些值被称为参数;传递进去的值为形参;接受数据的为实参

function age(a,b){  //a b 为接受传递数据的值 为形参
  var x=a+b;
  return x;  //返回值返回到调用它的地方
  }
 var sum= age(7,10) //很明显这里传递的是实际数,实参
  
  console.log(sum)  //结果17

函数的声明与var类似会产生一个变量声明提前

函数根据参数分为显式参数(例如前面的x,a,b)和隐式参数(arguments);JavaScript函数有个内置的对象arguments对象,其包含了函数调用的参数数组(将传递进来的参数当成一个数组),本身相当于一个类数组;

// 创造一个函数,利用arguments计算和
x = sumAll(1, 123, 500, 115, 44, 88);
function sumAll(a,b) {   //哪怕这里设置了形参来接受2个数,但是传进来的还是6个,arguments接受的是传进来的所有数。
    var i, sum = 0;
    for (i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}
console.log(x);

this 函数调用

       在方法中,this表示该方法所属对象;单独使用则表示全局对象;在函数中为全局对象,严格模式下,是未定义的;在事件中,this表示接收事件的元素;使用call和apply方法可以将this引用到任何对象(允许切换函数执行上下文环境,即this绑定的对象)。

   注意this是被谁调用的

 var name = 'window'
    var obj = {
      name: 'obj',
      say: function () {
           console.log(this.name); //this对象只是指向上一级调用的对象,不存在链表,say是被obj对象调用,所以这里可以找到'name' ;下面不行
        return function () {
          console.log(this.name);   //undefined 这里是将obj.say()赋值给了x,x是一个全局对象,是被window是调用,全局获取不到name,所以是undefined
        }
      }
    }
    var x = obj.say() //将方法赋值给x
    x()

回调函数:回调函数实现异步编程,例如:们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

定义主函数,回调函数作为参数
function A(callback) {
  callback(); //在A中调用B
  console.log('先执行');
}
//定义回调函数
function B() {
  // 模仿延时操作
  setTimeout(() => {
    console.log('后执行');
  }, 3000);
}
//调用主函数,将函数B传进去
A(B);
//因为加了一个延时操作,所以B才会后执行,函数顺序还是从上到下的!!这里就是为了解释回调

闭包:就是也权访问另一个函数作用域中的变量的函数;闭包生成的三个条件:1.函数嵌套函数;2.内部函数引用了外部函数中的数据/属性;3.参数和变量不会回收。(最常见的闭包的创建方法就是在一个函数内部创建另一个函数)

function f1() {
  var n = 999;
  nAdd = function () { n += 1 }  //定义一个全局变量,没有被执行调用,就没有意义
  function f2() {
    console.log(n);
  }
  return f2;
}
var result = f1();
result(); // 999
nAdd();
result(); // 1000

//ps:是看其他大佬还有一些资料写的!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值