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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341