目录
- 函数
- 语法
- 传参
- 函数表达式
- 作用域
- 对象
- 使用 字面量 创建对象 [常用]
- 使用 new Object 创建对象
- 使用 构造函数 创建对象
函数
语法
function 函数名(形参列表) {
函数体
return 返回值;
}
那么有了创建函数,肯定有调用函数:
// 函数调用
函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值
<script>
function hello() {
console.log('hello');
}
hello();
hello();
hello();
</script>
先写调用再写定义也是可以的!
传参
JS中函数传入的参数可以是任意的,只要支持内部逻辑不论什么类型都是可以作为参数。
function add(x, y) {
return x + y;
}
let result = add(10, 20);
console.log(result);
result = add('hello', 'world');
console.log(result);
result = add('hello', '10');
console.log(result);
正因为有这样的特性,JS天然就是不需要“泛型”/“重载”这样的语法的。
参数个数
一般写代码的时候,都需要调用时候传入的实参,个数和形参匹配
但是实际上,JS并没有在语法上做出这样的限制~
如果实参和形参个数不一样,也不是完全不可以的
// 最多可以支持 7 个参数的相加
function add(a, b, c, d, e, f, g) {
return a + b + c + d + e + f + g;
}
console.log(add(10, 20));
console.log(add(10, 20, 30));
console.log(add(10, 20, 30, 40));
console.log('hello', 60, 70);
因为这里我们调用函数的时候只传了2个数字参数/3个数字参数,没被传参传到的形参就是undefined,返回结果就是一个NaN;如果把字符串写在前面就是一个拼接的效果,我们传了3个参数,最后两个形参是未定义的,所以就是undefined。
如果实参比形参多,多出来的实参,就相当于没了。
函数表达式
在JS里,函数是“一等公民”,函数就像一个普通的变量一样,可以被赋值给其他的变量,也可以作为另一个函数的参数,还可以作为另一个函数的返回值(函数和普通变量,并没有本质区别,但是函数这样的变量相比于普通变量多了个功能,可调用)
var add = function() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(add(10, 20)); // 30
console.log(add(1, 2, 3, 4)); // 10
console.log(typeof add); // function
作用域
某个标识符名字在代码中的有效范围.
在 ES6 标准之前, 作用域主要分成两个
全局作用域: 在整个 script 标签中, 或者单独的 js 文件中生效.
局部作用域/函数作用域: 在函数内部生效.
// 全局变量
var num = 10;
console.log(num);
function test() {
// 局部变量
var num = 20;
console.log(num);
}
function test2() {
// 局部变量
var num = 30;
console.log(num);
}
test();
test2();
console.log(num);
对象
在 JS 中, 字符串, 数值, 数组, 函数都是对象.
每个对象中包含若干的属性和方法.
属性: 事物的特征.
方法: 事物的行为
使用 字面量 创建对象 [常用]
使用 { } 创建对象
var a = {}; // 创建了一个空的对象
var student = {
name: '蔡徐坤',
height: 175,
weight: 170,
sayHello: function() {
console.log("hello");
}
};
使用 { } 创建对象
属性和方法使用键值对的形式来组织.
键值对之间使用 , 分割. 最后一个属性后面的 , 可有可无
键和值之间使用 : 分割.
方法的值是一个匿名函数.
使用对象的属性和方法:
// 1. 使用 . 成员访问运算符来访问属性 `.` 可以理解成 "的"
console.log(student.name);
// 2. 使用 [ ] 访问属性, 此时属性需要加上引号
console.log(student['height']);
// 3. 调用方法, 别忘记加上 ()
student.sayHello();
使用 new Object 创建对象
var student = new Object(); // 和创建数组类似
student.name = "蔡徐坤";
student.height = 175;
student['weight'] = 170;
student.sayHello = function () {
console.log("hello");
}
console.log(student.name);
console.log(student['weight']);
student.sayHello();
注意, 使用 { } 创建的对象也可以随时使用 student.name = “蔡徐坤”; 这样的方式来新增属性.
使用 构造函数 创建对象
前面的创建对象方式只能创建一个对象. 而使用构造函数可以很方便 的创建 多个对象.
此时写起来就比较麻烦. 使用构造函数可以把相同的属性和方法的创建提取出来, 简化开发过程.所以这里我们就不介绍了!