今天发的有些晚了,这些都是昨天的笔记。
这些笔记都是干货~干货~干货,记得收藏起来
但我今天也没有偷懒。没有偷懒。没有偷懒。重要的事情说三遍。
本以为今天会很轻松,谁知道事情没我想的那么简单。
昨天看完视频后头就疼的厉害,想着今天任务布置少点,然后让自己休息一下。
但是忙到现在,今天的任务还没完成,剩下的任务无法完成了,毕竟需要读出声,
会影响室友,发完这篇博客我也该休息了。
上午用了一上午做了一个网页,中午休息了一下,谁知道醒来就3点多了。
开始整理笔记,写了一部分博客,下午下课吃完饭后又抓紧时间写了10多分钟吧,就该去上课了。
晚上下课跑步,洗澡,然后10点左右吧,我也没看时间,衣服都没洗,就来写博客了,但还是写到现在。
今天的博客知识点超级超多,之前一篇就是一个两个知识点,但是今天这个全是干货。
下面你就自己看吧。
如果觉得可以,记得三连哦~~
文章目录
函数
函数参数
形参和实参.
function 函数名(形参1, 形参2, ...) {
//形参用来接收实参穿递的参数,参数的传递是一一对应的
函数体;
}
// 函数调用,调用函数时传递的是实参
函数名(实参1, 实参2, ...);
函数的形参与实参个数不匹配
1.若实参个数大于形参个数
函数会取形参数量的实参,即形参几个,取实参的前几个
2.若实参个数小于性参数
形参相当于变量,若不传递实参,相当于声明一个变量未赋值,值为undefined,计算结果为NaN。
return 返回值
在函数内,return后的代码不会执行,return只能返回一个值,这个值可以是数组,也可以是对象。
若返回值为空时,则返回undefined。
arguments 的使用
当我们不确定有多少个参数传递时,可以使用arguments来获取我们传递的参数。
function getMax() {
// 使用arguments来获取参数,arguments获得参数存放在对象数组中
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (max < arguments[i]) {
max = arguments[i];
}
}
return max;
}
var max = getMax(12, 3, 45, 5, 76, 44);
console.log(max);
在JavaScript中,arguments实际是当前函数的一个内置对象,所有的函数都内置了一个arguments对象,arguments对象中储存了穿的所有实参。
伪数组
arguments是一个伪数组。
伪数组并不是真正意义上的数组,伪数组具有以下的属性:
- 具有数组的length属性
- 按照索引的方式进行储存
- 它没有真正数组的一些方法
作用域
作用域有全局作用域和局部作用域,作用域指在某个特定的环境内起效果。
全局作用域和局部作用域
JavaScript中有全局作用域和局部作用域。
全局作用域在整个
局部作用域只在函数的内部使用,又称为函数作用域。
全局变量:在全局都可使用
局部变量:只能在函数内使用,外部无法调用。
在函数内部未声明,直接赋值的变量会成为全局变量。
函数的形参也是局部变量。
全局变量只有关闭浏览器才会校会,比较占用内存资源。
局部变量在代码块程序运行完毕之后就会销毁,比较节省内存资源。
作用域链
内部函数访问外部函数,采用的则是链式查找的方式来决定取那个值,这种结构称为作用域链。
当内部函数访问一个值时,现在内部查找,若没有找到这个值,则在外层函数查找,若有,则调用。若没有,则查找全局变量,采用就近原则。
var a = 2;
function fn() {
// 找到了,进行调用
var a = 1;
function fun() {
// 先在自己内部查找,没有则查找外层函数
var b = 1;
console.log(a);
}
}
fn(); // 1
预解析
JavaScript代码有js解析器来执行,解析器执行代码分两步,预解析,代码执行。
预解析:js解析器会把所有的var声明和function函数提升到作用域的最前面。
代码执行:按照代码书写的顺序执行。
变量预解析和函数预解析
预解析又分变量预解析(变量提升)和函数预解析(函数提升)。
变量提升:就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作。
函数提升:把所有的函数声明提升到当前作用域的最前面,不调用函数。
function fn() {
console.log(a);
var a = 1;
}
fn(); // undefined
// 变量提升
function fn() {
var a; // 只提升变量声明,不提升赋值操作
console.log(a);
a = 1;
}
fun(); // 可以调用函数
function fun() {
console.log("Hi~");
}
// 函数提升
function fun();
fun();
function fun() {
console.log("Hi~");
}
对象
对象是一组无序的相关属性和方法的集合,所有的事务都是对象。
对象创建的方法
利用字面量创建对象
// 创建对象
var obj = {
uname: "张三",
age: 18,
sex: "女",
// 创建方法
sayHi: function() {
console.log("Hi~");
}
}
- 对象内的属性采用键值对的方式 属性名:属性值
- 多个属性中间用逗号隔开
- 方法 冒号:后跟匿名函数
使用对象
// 创建对象
var obj = {
uname: "张三",
age: 18,
sex: "女",
// 创建方法
sayHi: function() {
console.log("Hi~");
}
}
- 调用对象的属性。 对象名.属性名
console.log(obj.uname); // 张三
- 调用对象属性 。 对象名.[‘属性名’];
console.log(obj['sex']); // 女
- 调用对象的方法 sayHI。 对象名.方法名();
console.log(obj.sayHi());
变量,属性,函数,方法的区别
变量和属性的相同点:都是用来存放数据的不同点。
不同点
变量:单独声明并赋值,使用的时候直接写变量名即可,单独存在的。
属性:在对象里边的不需要声明,使用的时候必须是 对象名.属性
函数和方法的相同点: 都是事先某种功能,做某件事。
不同点
函数: 单独声明,调用时:函数名() ,单独存在。
方法: 在对象里边,调用时:对象.方法()。
利用new object创建对象
// 创建一个空对象
var obj = new Object();
// 为对象赋值
obj.uname = "张三";
obj.age = 18;
obj.sex = "男";
obj.sayHi = function() {
console.log("Hi~");
}
- 利用等号来赋值,添加对象的属性和方法
- 每个属性和方法之间用分号来隔开
利用构造函数来创建对象
- 构造函数内不是普通的代码,而是对象。
- 构造函数就是把对象里面的一些想同的属性和方法抽象出来封装到函数内。
- 利用构造函数创建对象的过程称为对象的实例化
- 构造函数繁殖一大类,类似于Java的类 Class
构造函数的语法格式
// 声明构造函数
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
// 构造函数的调用
new 构造函数名();
- 声明构造函数时,构造函数名首字母需要大写
- 不需要
return
就可以返回结果 - 调用时必须使用
new
- 调用函数时,会自动创建一个对象
- 属性和方法前面必须加
this
构造函数的声明与调用
// 创建一个构造函数
// 调用属性时,实参传递给函数的形参
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
// 调用方法时,实参会直接传递给方法
this.sing = function(形参) {
console.log(形参);
}
}
// 函数的调用
var zhangsan = new Star("张三", 18, "男");
console.log(zhangsan.name);
// 方法的调用
// 实参会直接传递给方法的形参
console.log(zhangsan.sing("实参"));
nwe关键字的执行过程
- new构建函数可以在内存中创建一个空的对象
- this就会指向这个空对象
- 执行构造函数内部的代码,给这个空对象添加属性和方法
- 返回这个对象
遍历对象
使用for in来遍历对象
语法:for(变量 in 对象) {}
var obj = {
name: "张三",
age: 18,
sex: "男"
}
for (var key in obj) {
// 在for in 里边,一般使用k或者key来充当变量
console.log(key); // 打印的是属性名
// 打印属性值
console.log(obj[key]); // 必须使用 对象[变量]
console.log(key + ": " + obj[key]); // 也可这样输出完整的信息
}