目录
01 函数
1.函数形参和实参个数不匹配问题arguments
function sum(num1, num2) {
console.log(num1 + num2);
}
sum(100, 200); // 形参和实参个数相等,输出正确结果
sum(100, 400, 500, 700); // 实参个数多于形参,只取到形参的个数
sum(200); // 实参个数少于形参,多的形参定义为undefined,结果为NaN
2.函数的返回值
函数没有 return 返回 undefined
break ,continue ,return 的区别
break :结束当前的循环体(如 for、while)
continue :跳出本次循环,继续执行下次循环(如 for、while)
return :不仅可以退出循环,还能够返回 return 语句中的值,同时还可以结束当前的函数体内的代码
3.arguments
当我们不确定有多少个参数传递的时候,可以用 arguments 来获取。
所有函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有实参。
arguments展示形式是一个伪数组,因此可以进行遍历。
伪数组具有以下特点: 具有 length 属性
按索引方式储存数据
不具有数组的 push , pop 等方法
4.函数的两种声明方式
1. 自定义函数方式(命名函数)
// 声明定义方式
function fn() {...}
// 调用
fn();
2.函数表达式方式(匿名函数)
// 这是函数表达式写法,匿名函数后面跟分号结束
var fn = function(){...};
// 调用的方式,函数调用必须写到函数体下面
fn();
02 作用域
1.作用域
全局作用域、局部作用域(函数作用域)
JS没有块级作用域(在ES6之前)
块作用域由 { } 包括。
在其他编程语言中(如 java、c#等),在 if 语句、循环语句中创建的变量,仅仅只能在本 if 语句、本循环语句中使用。
2.变量作用域
局部变量、全局变量
--在全局作用域下 var 声明的变量 是全局变量
特殊情况下,在函数内不使用 var 声明的变量也是全局变量(不建议使用)
--在函数内部 var 声明的变量是局部变量
函数的形参实际上就是局部变量
--局部变量更省空间
3.作用域链
作用域链:采取就近原则的方式来查找变量最终的值。
03 JS的运行机制----预解析
- JS引擎运行js分为两步:预解析 代码执行
- 预解析:js引擎会把js里面所有的var还有function提升到当前作用域的最前面
- 代码执行:按照代码书写的顺序从上往下执行
预解析分为 变量预解析(变量提升)和函数预解析(函数提升)
- 变量提升:就是把所有的变量声明提升到当前作用于的最前面 不提升赋值操作
- 函数提升:就是把所有的函数声明提升到当前作用域的最前面 不调用函数
04 对象
1.创建对象的三种方式:
- 利用字面量创建对象
var star = {
name : 'pink', //键:值,
age : 18,
sex : '男',
sayHi : function(){
alert('大家好啊~');
}
};
对象的调用:
console.log(star.name) // 调用名字属性
console.log(star['name']) // 调用名字属性
star.sayHi(); // 调用 sayHi 方法,注意,一定不要忘记带后面的括号
- 利用 new Object 创建对象
var andy = new Obect();
andy.name = 'pink';
andy.age = 18;
andy.sex = '男';
andy.sayHi = function(){
alert('大家好啊~');
}
- 利用构造函数创建对象
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayHi = function() {
alert('我的名字叫:' + this.name + ',年龄:' + this.age + ',性别:' + this.sex);
}
}
var bigbai = new Person('大白', 100, '男');
var smallbai = new Person('小白', 21, '男');
注意
1. 构造函数约定首字母大写。
2. 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
3. 构造函数中不需要 return 返回结果。
4. 当我们创建对象的时候,必须用 new 来调用构造函数。
2.遍历对象
for...in 语句用于对数组或者对象的属性进行循环操作。
for (变量 in 对象名字) { //通常我们会将这个变量写为 k 或者 key
// 在此执行代码
}
for (var k in obj) {
console.log(k); // 这里的 k 是属性名
console.log(obj[k]); // 这里的 obj[k] 是属性值
}
小结
1. 对象可以让代码结构更清晰
2. 对象复杂数据类型object。
3. 本质:对象就是一组无序的相关属性和方法的集合。
4. 构造函数泛指某一大类,比如苹果,不管是红色苹果还是绿色苹果,都统称为苹果。
5. 对象实例特指一个事物,比如这个苹果、正在给你们讲课的pink老师等。
6. for...in 语句用于对对象的属性进行循环操作。