【JAVA WEB】JavaScript--函数 && 作用域 && 对象

目录

函数

语法格式

示例

定义没有参数列表,也没有返回值的一个函数

定义一个有参数列表 ,有返回值的函数

关于参数个数 

函数表达式 

作用域 

作用域链

对象 

基本概念

创建对象

1.使用 字面量 创建对象

2.使用new Object()创建对象

3.使用构造函数创建对象

JavaScript 的对象和Java的对象区别

1.JavaScript 没有类的概念

2.JavaScript对象不区分“属性” 和“方法”

3.JavaScript对象没有public/private等访问控制机制

4.JavaScript对象没有“继承”(ES6之前)

class语句

继承 

 


函数

语法格式

//创建函数 / 函数声明 / 函数定义   与java的区别是不需要写返回值类型

function 函数名(形参列表){

        函数体

        return 返回值;

}

//函数调用

函数名(实参列表)                        //不考录返回值

返回值 = 函数名(实参列表)         //考虑返回值

示例

定义没有参数列表,也没有返回值的一个函数

效果:

定义一个有参数列表 ,有返回值的函数

效果:

【JAVA WEB】JavaScript--函数 && 作用域 && 对象_第1张图片

关于参数个数 

实参和形参之间的个数可以不匹配,但是实际开发一般要求形参和实参个数要匹配

  • 如果实参个数比形参个数多,则多出的参数不参与函数运算
  • 如果实参个数比形参个数少,则此时多出来的形参值为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(参数)

你可能感兴趣的:(前端,java,javascript)