function 函数名(形参列表) {函数体return 返回值;
}
那么有了创建函数,肯定有调用函数:
// 函数调用
函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值
先写调用再写定义也是可以的!
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)); // 30console.log(add(1, 2, 3, 4)); // 10console.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();
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 = “蔡徐坤”; 这样的方式来新增属性.
前面的创建对象方式只能创建一个对象. 而使用构造函数可以很方便 的创建 多个对象.
此时写起来就比较麻烦. 使用构造函数可以把相同的属性和方法的创建提取出来, 简化开发过程.所以这里我们就不介绍了!