JS基础(二)---函数、数组及对象

一、函数

函数的概念

函数,也叫功能或方法,函数将一段具备某项特殊功能的代码段封装成一个完整的结构体。

函数的作用就是封装一段功能代码,可以被反复调用,实现代码的重用

函数的声明

声明语法:

function 函数名 (参数){
  函数的结构体;
}

函数在声明时,函数体不会执行,只有在被调用的时候才会执行

函数的调用

函数调用方式: 函数名(参数),形如:foo();

函数参数: 专门接收函数执行时所必须的数据的变量

函数的参数可以设置0个或者多个,参数之间用逗号隔开

函数的参数有两种名称:形参和实参,其本质都是各种类型的数据变量

形参:形式参数, 在函数定义中,()内部的参数叫做形参,用来接收函数调用时实参传递过来的数据

实参:实际参数,在函数调用中,()中的参数就是实参,用来传递数据给形参使用

arguments对象

arguments对象是函数的一个内置属性,arguments对象中存储着实参的所有值,是一个类数组对象,能够通过遍历进行取值

函数的返回值

函数在执行完毕后,会返回一个执行结果,通过return关键字实现函数的返回值

如果不写return 语句,则函数默认返回undefined
如果存在return 语句,则函数返回值为return 后面的数据

其中,如果函数内部执行了一个return语句,则函数体之后的代码将不会再执行

作用域与作用域链

变量的可用范围,scope
本质其实是一个存储多个变量的对象

js中存在两种作用域:全局作用域和函数作用域
全局作用域:专门保存全局变量的对象
函数作用域:专门保存函数内部的局部变量的对象
局部变量:只有在函数调用时的函数内部才能使用
全局变量:在任何时候的任何位置都可被访问

作用域链:在对变量取值时,都是从当前定义变量的函数开始查找,如果当前没有定义该变量,则从上层查找,直到查找到全局作用域,这种查找过程中形成的链式结构,就是作用域链

函数声明提前问题

在正式执行程序前,都会先对var 声明的变量 和 function 声明的函数进行预解析,将变量和函数集中到当前作用域的顶部进行集中声明,其中,先提升var 声明的变量,再提升function 声明的函数

赋值操作则留在原地

预解析完成后,再根据新的代码顺序,从上往下按照既定的规律执行js

函数表达式

函数表达式也是函数声明的另一种方式,写法:

var  函数名 = function(参数){
  函数体;
  return 返回值
}

使用函数表达式的方式进行函数声明时,在预解析过程中,就不会进行函数声明提升了,而是进行变量声明提升

立即执行函数 IIFE

IIFE:Immediately-Invoked-Function-Expression,即时调用的函数表达式,表示在函数定义时就立即调用

要实现IIFE,必须将函数转换为表达式形式,才能实现自调用

方法: 通过一定的手段,让函数参与特定的运算,即在函数前加一些运算符,如:
数学运算符: +、 -、 ()
逻辑运算符: !
IIFE最常用的就是通过加 () 运算符来实现,如:

(function(i){
  console.log(i);     //  1
})(1);

二、数组

多个数据或变量按一定顺序保存在一个集合中,则称这个集合为数组

创建数组

创建数组的4种方式

  • 创建空数组
    var 数组名 = []; --->在js中,数组的字面量就是 []

  • 创建数组的同时,初始化数组中的每个元素
    var 数组名 = [值1, 值2, 值3, ...];

  • 创建空数组
    var 数组名 = new Array(n);
    这种方法,创建一个数组类型的对象,n 表示初始化元素的个数,省略则表示空数组,不省略则表示创建一个具有n个undefined值的数组

  • 创建数组同时初始化数组元素
    var 数组名 = new Array(值1, 值2, 值3, ...)

其中 new Array 在一定情况下存在歧义,比如:new Array(3); 代表3个元素值为undefined的数组,而不是元素值为3的数组。

获取数组元素

通过数组的下标 i 来获取数组的每一个元素,即 数组名[i] = 值
其中,i 从0开始计算,按照整数开始排序,如 0,1,2,3,...

数组的长度

length,能记录数组的数据总长度,如 数组名.length

数组的长度与数组最后一项的下标存在一定关系,即最后一项的下标等于数组的length-1

数组的长度也不是固定的,可以发生更改,当数组的个数增加时,length值自动跟着改变

数组length属性有两个固定用法

  • 获取最后一个元素值:arr[arr.length - 1]
  • 向数组末尾追加一个新元素: arr[arr.length] = 新值;

数组的遍历

主要是根据数组的下标在0 到 length - 1 之间,用for循环来对数组的每一个元素进行访问。


关联数组

上面所讲的是常规的索引数组,还有一种数组叫关联数组,可自定义下标,

创建关联数组的方法:
1、第一步,先创建空数组,var arr = [];
2、第二步,再向数组中添加元素,arr[key] = value; 如:arr[''name''] = "张三",arr["age"] =30;

其中,key为字符串, length属性无效,永远为0,同时,关联数组中的key 不能重复,如果访问不存在的下标元素,也不会保存,返回undefined值

遍历关联数组:for (var key in arr) { } 结构


三、对象

对象的基本概念

JS中的对象是无序属性的集合,属性可以是基本值、函数等。对象的结构可以看成是一种键值对的形式,值可以是数据和函数。

对象的创建

创建对象的最简单的方式:使用对象字面量赋值给变量,类似数组

对象的字面量语法: {},内部可以存放多条数据,数据之间用逗号隔开,每条数据是以键值对的形式存在,即 k(属性名): v(属性值,值可以是任意类型的数据,简单数据类型、函数、对象),如:

var obj = {
  k1: v1,
  k2: v2,
  k3: v3
};

在对象中,特征,用属性表示, 行为,则用方法表示

对象方法和属性的调用

在调用对象的属性时,有两种形式:
obj.属性名 或者 obj["属性名"],如果属性是个变量,则只能使用 [] 的形式表示,即 obj[属性]

在调用对象的方法时,需要在方法名后加()执行,即 obj.fn()

对象的遍历

可以将对象看成是一种键值对形式的数据结构,在遍历对象时,类似数组,通过 for in 循环,根据属性名遍历出每一项对应的属性值,即:

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

推荐阅读更多精彩内容