02-JavaSeript基础二

02-JavaSeript基础二

1.1 ( 函数概述

1.1.1 什么是函数

函数就是可以重复执行的代码块。

1.1.2 为什么要用函数

因为一部分代码使用次数可能会很多,所以封装起来,需要的时候调用就可以了。

案例:求和;(总是求和)

1.2 函数的定义

关键字function。

function 函数名(){

程序

}

1.3 参数

参与运算的变量。

为什么要设置参数?为了增强函数的功能性,和程序员的交互性,和函数的可拓展行。所以我们增加了参数这个概念。

1.3.1 形参

形式上参与运算的变量,无实际值,为实参占位置,就像一个躯壳一样。(可以理解为函数的内部变量外部无法访问)

1.3.2 实参

实际参与运算的变量。形参为他占位置,真实参与运算的变量。

1.4 返回值

有return函数就有值;没有return函数就没值;

函数程序运行后的结果外部需要使用的时候,我们不能直接给与,需要通过return返回。

总结:函数内部,return后面的值就是返回值;

作用:函数执行后剩下结果就是返回值。

函数执行完毕,会不会留下点儿什么,取决于有没有返回值

var temp = 函数名()=(功能)+该函数的返回值;

1.4.1注意

1.p果函数没有显示的使用return语句,那么函数有

默认的返回值:undefined

2.如果函数使用return语句,那么在return后面的值,

就成了函数的返回值

3. 如果函数使用 retun语句,但是return后面没有任何

值,那么函数的返回值 也是:undefined

4.函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。

1.5案例

1.求圆的周长和面积a. Math.Pl

2.求2个数中的最大值,求3个数中的最大值

3.求一组数中的最大值和最小值

4. 翻转数组,返回一个新数组

5. 对数组排序,从小到大

6.求阶乘

7.求1!+2!+3!+....+n!(求阶乘的和)

8.判断一个数是否是素数(一个数字只能被1和自己整除)

1.6 函数名、函数体和函数加载问题

(重点记忆)

1.函数名是什么

函数名==整个函数。

function fn() alert(1);

console.log(fn) ==

console. log(function fn()falert(1)});

2. 函数加载问题

JS加载的时候,只加载函数名,不加载函数体。所以如果想使用内部的成员变量,需要调用函数。

1.7 作业:

1.求斐波那契数列Fibonacci中的第n个数是多少?

1 1 2 3 5 8 13 21.

2.输入某年某月某日,判断这一天是这一年的第几天?(闰年)

(四年一国,百年不国,四百年在闰)

1.8 函数定义

1.8.1 西数声明(自定义声明)

function f(a,b){

return a + b

console.log(f(5, 6))

1.8.2函数表达式

var myFun = function (a,b){

return a +b

console.log(myFun(6, 7));

1.8.3 通过创建对象声明函数

var f = new

Function("console.log(789)");

 f();

1.9 变量和作用域(隐式全局变量和变量声明提升)

1.9.1变量和作用域(函数中的变量需要函数执行后才能使用)

1.全局变量(成员变量)

哪里都可以访问到的变量。(进入script立即定义的变量和没有var的变量)

2.局部变量

函数内部的变量,只有函数内部可以访问到。(函数内部用var定义的变量和形参)

1.9.2

隐式全局变

隐式全局变量就是隐藏的全局变量不好被发现。

function fn()f

// b和c就是隐式全局变量

var a =b

注意:

function fn()f

Var

a = b = C = 1;

// b和c就是隐式全局变量(等号)var a=1;b=2;c= 3;

// b和c就是隐式全局变量(分号)

var a=1 , b= 2, c= 3;

// b和c就不是隐式全局变量(逗号)

1.9.3 变量声明提升(出现原因:预解析)

函数中,定义变量在使用变量之后。

只提升变量名,不提升变量值,容易出现undefined计算后形成NaN。

/提前看一眼

这个习惯叫什么呢? 预解析!

变量声明提升:在预解析的时候,成员变量和

函数,被提升到最高位置,方便其他程序访问。

变量声明提升特点:成员变量只提升变量名,不提升变量值。但是,函数是所有内容全部提升。(function直接定义的)

函数范围内照样会出现变量声明提升

什么情况容易出现变量声明提升:使用变量在定义变量之前。

面试题:

var num = 10fun();

fun()

function fun() (

console.log(num);

var num = 20;

var a= 18;

f1(

function f1()f

var b=9

console.log(a);

console.log(b);

var a= '123';

}

f2();

console.log(CC);

console.log(bb);

console.log(aa);

function f2()(

var aa = bb = cc = 9console.log(aa);

console.log(bb);

console.log(CC);

1.10小知识

函数不调用不执行

函数名就等于(整个函数)

加载函数的时候,只加载函数名,不加载函数

参数相当于局部变量

就近原则使用变量

两个平级的函数中的变量不会相互影响(可以

使用同样的形参名)

2函数高级

2.1匿名西数(了解)

定义:匿名函数就是没有名字的函数。

作用:

1.不需要定义函数名的时候。

2.书写起来更简便。

匿名函数的调用有三种方法:1. 直接调用或自调用。(function()falert(1)8)()2.事件绑定。

3. 定时器。

2.2 函数是一种类型(了解)

2.3 函数作为参数(了解)

执行函数就等于:函数名+();整个函数+();

2.4  递归(理解)

递归:就是函数自己调用自己。(懂得)必须有跳出条件。

练习:

用递归求1-100的和

3对象和面向对象

3.1JS中的对象(Object )什么是对象?

var obj = new Object()

obj.属性名=值

obj.方法名 = function ()

3.2构造函数(就是为了创建对象实例)

可以创建对象实例的函数。

区别与普通函数,首字母大写。

function Student(name){     //创建一个构造函数

this.name = name;            //构造函数中的对象指的是this.

this.sayHi = function()"(

console.log(this.name+"说:

大家好!");

3.3创建自定义对象

3.3.1 This

this只出现在函数中。

谁调用函数,this就指的是谁。

new People();

被创建的对象实例。

3.3.2 new

开辟内存空间,存储新创建的对象( new Object());把this设置为当前对象;

执行内部代码,设置对象属性和方法;返回新创建的对象。

3.4 对象字面量和JSON

对象的字面量就是一个行

而里面的属性和方法是以:形式对应表现的。

var arr = [];

var obj ={aaa:1113};

var json ={"aaa":111};

var obj = {

sayHi :function (){ console.log(1);

对象和数组也可以作为其他对象的属性

对象字面量定义方法和json很像,只有一点不同,json的key要求必须加";

3.5 json组成

JSON:JS中一种对象的表现形式

var json = {"aaa":1, "bbb":2

,"ccc":3, "ddd":4}

json由得和key:value以及逗号组成,三部分。(只有一个键值对key;value时,可以没有逗号)

对象本身没有length, 所以不能用for循环遍历

3.6 for...in...遍历JSON

var json ={'aaa":1, "bbb":

2,"ccc":3, "ddd":4}

for(var key in json){

//key代表aaa, bbb.....等

//json [key]代表1, 2, 3....等

// json. key代表json这个对象的key属性

的值,并不是kev对应的变量值的属性。

console.log(json.key);

/ /json[key], 代表的是json这个对象中key

这个变量值对应的属性值

console.log(ison [key]);

练习:制作一个json,然后遍历

3.7 参数和传值问题

简单类型数据做参数,函数内部对参数的修改不应影响外部变量简单类型传数值。

复杂类型数据做参数,函数内部对参数的修改会应影响外部变量复杂类型传地址。

JS中是没有类这个概念的,在新标准中,出现了类的概念,JS中是不能用函数创建对象的,强类型语言中需要用类.

内置对象:js本身已经帮我们写好的对象。我们创建出

来以后直接是使用就可以。不需要定义了

内置对象例如:Date , Array, Math, RegExp, Error, String...学习内置对象,主要学习API, H5的方法,后期学到H5在说。

4数组高级API

4.1学习API的方法

4.1.1 侧重点(四点)

调用者:谁调用的。

参数:有无,几个。

返回值:有无,什么类型。功能:干什么用的。

4.1.2自学方法

1.离线

离线文档

2.在线

a. W3C (前端标准W3CSchool)

b. CMON (开发者网站)MDN Web Docs

c.百度/谷歌/搜狗。。。

4.2Array的内置方法数组,JS中的一个内置对象

4.2.1判断数组和转换数组。instanceof:是一个关键字。

判断A是否是B类型.

布尔类型值 = A instanceof

Array.isArray()

HTML5中新增 判断是不是数组

布尔类型值 = Array.isArray(变量)

toString()

把数组转换成字符串,每一项用,分割字符串 = 数组.toString();

valueOf()

返回数组对象本身

数组本身= 数组.valueof();

join

根据每个字符把数组元素连起来变成字符串

字符串= 数组.join(变量);我还想吃?

变量可以有可以没有。不写默认用返号分隔,无缝连接用空字特串。

4.2.2数组增制和换位置(原数组将被修改)

push()

在数组最后面插入项,返回数组的长度

数组1改后的长度=数组1.push(元素1);

pop()

取出数组中的最后一项,返回最后一项

被删除的元素=数组1.pop()

unshift()

在数组最前面插入项,返回数组的长度

数组1改后的长度1)=数组1.unshift(元素

shift()

取出数组中的第一个元素,返回第一项

被删除的元素=数组1.shift();

reverse()

翻转数组(原数组讲呗反转,返回值也是被反转后的数组)

反转后的数组=数组1.reverse();

sort()

给数组排序,返回排序后的数组。如何排序看参数。

从小到大排序后的数组 = 数组

1.sort(function(a, b)f return a-b;

无参:按照数组元素的首字符对应的Unicode编码值从小到大排列数组元素。

带参:必须为函数(回调函数--callback)。

o 函数中带有两个参数,代表数组中的前后元素

o 如果计算后(a-b),返回值为负数,a排b前面。

O 等于0不动。

O 返回值为正数,a排6后面。

4.2.3了解方法

concat()

//把参数拼接到当前数组

新数组=数组1.concat(数组2);

slice() 1/从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始

新数组 = 数组1.slice(索引1,索引2);

splice()//删除或替换当前数组的某些项目,

参数start, deleteCount, options(要替换的项目)

新数组 =数组1.splice(起始索引,个数,替换内容);

indexof()、lastIndexOf() 1/0果没找到返回-1

索引值 = 数组indexof/lastIndexOf(数组中的元素);

//迭代方法 不会修改原数组

every()、filter()、forEach()、

map()、some()

数组/boolean/无 =数

组.every/filter/forEach/map/ some(function(element, index, arr)(1/程序和返回值;

//对数组中每一项运行以下函数,如果都返回true, every返回true,如果有一项返回false, 则停止遍历 every返回false;不写默认返回false

array.every(function(item, index, arr

//对数组中每一项运行以下函数,该函数返回结果是true的项组成的新数组

var arr=

array.filter(function(item, index, arr)));

console.log(arr);

//遍历数组

array.forEach(function(item, index, a rr)));

//对数组中每一项运行以下函数,返回该函数的结果组成的新数组

var arr =

array.map(function(item, index, arr)

13 return "\"" + item + "\

//对数组中每一项运行以下函数,如果该函数对某一项返回true, 则some返回true

var b =

array.some(function(item, index, arr){}

if (item == “w")f

return true

return false;

4.2.4

清空数组

var array = [1, 2,3, 4, 5, 6];

array.splice(O, array.length);1/刪除

数组中所有项目

array.length = 0;//length属性可以赋值,其它语言中length是只读

array = []             //推荐

4.2.5 练习

1.将一个字符串数组输出为|分割的形式,比如”刘备I

张飞1关羽”。使用两种方式实现

2.将一个字符串数组的元素的顺序进行反转。

["a,"b” "c", "d"] ["d" "c", "b","a]。使用两种种方式

实现。提示:第i个和第length-i-1个进行交换

3.找到数组中每个字母出现的次数["c","a"."z", "a"."a"]

(对象)

4.工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过

2000的刪除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值