JavaScript-函数

一、函数的概念

函数是一段可以反复调用的代码块。

作用:在程序设计中,常将一些常用的功能模块编写成函数,以减少重复编写程序段的工作量。提高代码的复用性、可读性等

二、函数的创建方式(函数的声明)

(1)function 命令

function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号。函数体放在大括号里面。

function 函数名称() {

    函数中要执行的代码;

}

function print() {

  console.log(1);

}

上面的代码命名了一个print函数,以后使用print()这种形式,就可以调用相应的代码。这叫做函数的声明

(2)函数表达式

除了用function命令声明函数,还可以采用变量赋值的写法。

var print = function() {

  console.log(1);

};

这种写法将一个匿名函数(没有名字的函数)赋值给变量。这时,这个匿名函数又称函数表达式

函数的执行(调用)

函数定义好之后,函数中的代码在程序运行过程中不会执行;

function print() {

console.log(1);

}

通过函数名称调用函数,调用时执行函数中的代码;调用函数时,要使用圆括号运算符print();

三、事件的概念种类

事件:就是发生的事情

事件驱动:就是发生了某件事情之后要处理的手段和过程

事件种类

参数的声明

函数名后面是一对圆括号,里面是传入函数的参数

function 函数名称(参数列表){

    函数体中的代码;

}

函数定义的时候的参数,称为形参

function print(s) {

  console.log(s);

}

function add(a,b) {

  console.log(a+b);

}

参数的传递

print(1);

调用函数的时候,传入了 参数  1,1的值给了形参s。

函数调用时候传入的参数叫做实参

函数的返回值

JavaScript 引擎遇到return语句,就直接返回return后面的那个表达式的值,后面即使还有语句,也不会得到执行。也就是说,return语句所带的那个表达式,就是函数的返回值。

注、return语句不是必需的,如果没有的话,该函数就不返回任何值,或者说返回undefined。

function add(x, y) {

  return x + y; //返回x+y的和

}

var res = add(1, 1) ;//把函数的返回值 赋值给 变量res

console.log(res);//2

变量的声明提升

函数内部会产生“变量提升”现象。在函数内部使用var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部。

function foo(x) {

  if (x > 100) {

    var tmp = x - 100;

  }

}

// 等同于

function foo(x) {

  var tmp;

  if (x > 100) {

    tmp = x - 100;

  };

}

五、arguments

    由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来。arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。

var f = function (one) {

  console.log(arguments[0]);

  console.log(arguments[1]);

  console.log(arguments[2]);

}

f(1, 2, 3)

通过arguments对象的length属性,可以判断函数调用时到底带几个参数。

六、作用域

作用域(scope)指的是变量存在的范围。

局部作用域和全局作用域在 ES5 的规范中,Javascript 只有两种作用域:一种是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;另一种是函数作用域,变量只在函数内部存在。

函数外部声明的变量就是全局变量(global variable)

在函数内部定义的(使用var)变量,外部无法读取,顾称为“局部变量”(local variable)

var v = 1;//全局变量

function f() {

  var b = 2;//局部变量

  console.log(b);

  console.log(v);//它在函数内部可以读取全局变量,但是局部变量的不能再函数外部访问

}

f()

上面的代码表明,函数f内部可以读取全局变量v。

函数内部定义的变量,会在该作用域内覆盖同名全局变量。

var v = 1;

function f(){

  var v = 2;

  console.log(v);

}

f() // 2

v // 1

上面代码中,变量v同时在函数的外部和内部有定义。结果,在函数内部定义,局部变量v覆盖了全局变量v。

注意,对于var命令来说,局部变量只能在函数内部声明,在其他区块中声明,一律都是全局变量。

if (true) {

  var x = 5;

}

console.log(x);  // 5

上面代码中,变量x在条件判断区块之中声明,结果就是一个全局变量,可以在区块之外读取。

七、递归函数:函数可以调用自身,这就是递归。简单来说,就是函数自己执行过程中,调用自己本身。

递归的步骤:

1.先找临界值,即无需计算 就能获取的值     

2.找本次 和上一次的关系  f(n) = f(n-1)+n  (数学归纳)

3.假设当前函数已经可以使用了,调用自身计算上一次的运行结果,再写出本次运行结果 即可

八、构造函数及对象类型(了解)

面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。

面向对象编程的第一步,就是要生成对象。对象是单个实物的抽象。通常需要一个模板,表示某一类实物的共同特征,然后对象根据这个模板生成

JavaScript 语言使用构造函数(constructor)作为对象的模板。所谓”构造函数”,就是专门用来生成实例对象的函数。它就是对象的模板,描述实例对象的基本结构。一个构造函数,可以生成多个实例对象,这些实例对象都有相同的结构。

构造函数就是一个普通的函数,但是有自己的特征和用法。

function Vehicle  () {

  this.price = 1000;

};

上面代码中,Vehicle就是构造函数。为了与普通函数区别,构造函数名字的第一个字母通常大写。

构造函数的特点有两个。 函数体内部使用了this关键字,代表了所要生成的对象实例。生成对象的时候,必须使用new命令。new命令的作用,就是执行构造函数,返回一个实例对象。

function Vehicle  () {

  this.price = 1000;

};

var v = new Vehicle();

v.price // 1000

上面代码通过new命令,让构造函数Vehicle生成一个实例对象,保存在变量v中。这个新生成的实例对象,从构造函数Vehicle得到了price属性。new命令执行时,构造函数内部的this,就代表了新生成的实例对象,this.price表示实例对象有一个price属性,值是1000。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。