目录
函数
语法格式
示例
定义没有参数列表,也没有返回值的一个函数
定义一个有参数列表 ,有返回值的函数
关于参数个数
函数表达式
作用域
作用域链
对象
基本概念
创建对象
1.使用 字面量 创建对象
2.使用new Object()创建对象
3.使用构造函数创建对象
JavaScript 的对象和Java的对象区别
1.JavaScript 没有类的概念
2.JavaScript对象不区分“属性” 和“方法”
3.JavaScript对象没有public/private等访问控制机制
4.JavaScript对象没有“继承”(ES6之前)
class语句
继承
函数
语法格式
//创建函数 / 函数声明 / 函数定义 与java的区别是不需要写返回值类型
function 函数名(形参列表){
函数体
return 返回值;
}
//函数调用
函数名(实参列表) //不考录返回值
返回值 = 函数名(实参列表) //考虑返回值
示例
定义没有参数列表,也没有返回值的一个函数
<script>function hello(){console.log("hello")}hello();
</script>
效果:
定义一个有参数列表 ,有返回值的函数
<script>function hello(num,name){console.log(num+"hello"+name)return 1;}let a = hello(7,"lzb");
</script>
效果:
关于参数个数
实参和形参之间的个数可以不匹配,但是实际开发一般要求形参和实参个数要匹配
- 如果实参个数比形参个数多,则多出的参数不参与函数运算
- 如果实参个数比形参个数少,则此时多出来的形参值为undefined
函数表达式
另一种函数的定义方式,与lamboda表达式类似
var add = function() {
var sum = 0;
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(add(10,20)); //30
console.log(typeof add) //function
此时形如 function(){ } 这样的写法定义了一个匿名函数,然后将这个匿名函数用一个变量来表示,这样就可以通过这个add 变量 来调用函数
作用域
某个标识符名字在代码中的有效范围
在ES6标准之前,作用域主要分成两个
- 全局作用域:在整个script,或者单独的 js 文件中生效
- 局部作用域/函数作用域:在函数内部生效
PS:在JS中,如果定义一个变量不使用let吗,var此时这个变量就变成一个全局变量
作用域链
背景:
- 函数可以定义在函数内部
- 内层函数可以访问外层函数的局部变量
内部函数可以访问外部函数的变量,采取的是链式查找的方式,从内到外依次进行查找
let num = 10;
function test01() {
let num = 100
console.log(num) //100
function test02() {
//从上一层函数去找num
console.log(num) //100
}
}
//如果test01里没有定义num,便从该函数所在的script找num,即第一行
let num = 10;
function test01() {
//所在script找num变量
console.log(num) //10
function test02() {
//从上一层函数去找num
console.log(num) //10
}
}
对象
基本概念
对象是指具体的事务
举例:“电脑”不是对象,而是一个泛指的类别,而“我的联想笔记本” 就是一个对象
在JS中,字符串,数值,数组,函数都是对象
每个对象包含若干的属性和方法
- 属性:事物的特征
- 方法:事务的行为
创建对象
1.使用 字面量 创建对象
- 使用 { } 创建对象
- 属性和方法使用键值对的形式来组织
- 键值对之间使用 ,分割。最后一个属性后面的 , 可有可无
- 键和值之间使用:分割
- 方法的值是一个匿名函数
//定义一个带属性、方法的对象
let student = {
//属性
name: "lzb",
id:123,
//方法,使用匿名函数来定义
sayHello:function(){
console.log("hello")
}
}
//访问对象属性
console.log(student.name)
console.log(student[ ' id ' ])
//访问对象方法
student.sayHello()
2.使用new Object()创建对象
let student = new Object()
student.name = "小明"
student['id']=123
student.sayHello = function() {
console.log("say hello")}
3.使用构造函数创建对象
function student(name,id,age)
{
this.name = name
this.id = id;
this.age = age
this.Say = function( ){
console.log(name + "say hello")
}
//构造对象
let xiaoming=new People(“小明” ,123,100)
JavaScript 的对象和Java的对象区别
1.JavaScript 没有类的概念
对象其实就是 “属性”+“方法”
类相当于把一些具有共性的对象的属性和方法单独提取了出来,相当于一个 “模子”
在JavaScript中的“构造函数”也能起到类似的效果
2.JavaScript对象不区分“属性” 和“方法”
JavaScript函数和普通的变量一样,存储了函数的变量能够通过()来进行调用执行
3.JavaScript对象没有public/private等访问控制机制
对象中的属性都可以被外界随意访问
4.JavaScript对象没有“继承”(ES6之前)
继承的本质就是让“两个对象建立关联”,或者说是让一个对象能够重用另一个对象的属性和方法。
JavaScript中使用“原型”机制来实现类似的效果
class语句
在ES6之前没有class,ES6引入了class,使用class可以构造对象
class 类名{
//构造方法
constructor(name,id,age)
{
this.name=name
this.id=id
this.age=age
}
//class里面 方法不需要function
Say(){
console.log(this.name +"hello");
}
//static关键字 ,类名访问
static other = "other"
}
let tmp=new 类名(参数)
继承
class People{
//构造方法
constructor(name,id,age)
{
this.name=name
this.id=id
this.age=age
}
//class里面 方法不需要function
Say(){
console.log(this.name +"hello");
}
//static关键字 ,类名访问
static other = "other"
}
class Student extends People{
constructor(name,id,age,clazz)
{
super(name,id,age)
this.clazz=clazz
}
}
let tmp=new Student(参数)