【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 返回值;

}

//函数调用

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

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

示例

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

<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(参数)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/385192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft Word 超链接

Microsoft Word 超链接 1. 取消超链接2. 自动超链接2.1. 选项2.2. 校对 -> 自动更正选项2.3. Internet 及网络路径替换为超链接 References 1. 取消超链接 Ctrl A -> Ctrl Shift F9 2. 自动超链接 2.1. 选项 2.2. 校对 -> 自动更正选项 ​​​ 2.3. Internet…

java中事务的使用

文章目录 前言一、同一张表1.业务代码2.测试代码3.测试结果 二、不同表1.业务代码2.测试代码3.测试结果 总结 前言 本文将介绍在springboot中使用Transactional注解来完成对数据库事务的操作&#xff0c;保证数据一致性。 一、同一张表 1.业务代码 Controller Controller p…

二、ClickHouse简介

ClickHouse简介 前言一、行式存储二、DBMS功能三、多样化引擎四、高吞吐写入能力五、数据分区与线程级并行六、场景七、特定版本 前言 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用 C 语言编写&#xff0c;主要…

C++线程浅谈

本篇文章我们来介绍一下C 多进程 多线程的技术 1.为什要学习多线程 多进程 提高程序的性能&#xff1a;进程和线程可以使程序并发执行&#xff0c;从而充分利用计算机的多核处理器和资源&#xff0c;提高程序的执行效率和吞吐量。 实现复杂任务&#xff1a;通过将任务划分为多…

Acwing---842.排列数字

排列数字 1.题目2.基本思想3.代码实现 1.题目 给定一个整数 n&#xff0c;将数字 1∼n排成一排&#xff0c;将会有很多种排列方法。 现在&#xff0c;请你按照字典序将所有的排列方法输出。 输入格式 共一行&#xff0c;包含一个整数 n。 输出格式 按字典序输出所有排列方案…

Java安全 URLDNS链分析

Java安全 URLDNS链分析 什么是URLDNS链URLDNS链分析调用链路HashMap类分析URL类分析 exp编写思路整理初步expexp改进最终exp 什么是URLDNS链 URLDNS链是Java安全中比较简单的一条利用链&#xff0c;无需使用任何第三方库&#xff0c;全依靠Java内置的一些类实现&#xff0c;但…

读千脑智能笔记12_阻止人类灭绝

1. 阻止人类灭绝 1.1. 宇宙中唯一知道这些的物体&#xff0c;唯一知道宇宙存在的物体&#xff0c;是我们的大脑 1.2. 如果没有关于某个事物的知识&#xff0c;我们能说这个事物就一定存在吗&#xff1f; 1.2.1. 我们的大脑扮演着这样一个独特的角色&#xff0c;这很令人着迷…

使用matplotlib库在Python中绘制散点图

使用matplotlib库在Python中绘制散点图&#xff0c;展示了两个月份的气温变化。 # coding: utf-8 from matplotlib import pyplot as plt # 导入matplotlib库中的pyplot模块&#xff0c;并重命名为plt from matplotlib import font_manager # 导入font_manager模块&#xff…

代码随想录刷题笔记 DAY 23 | 修剪二叉搜索树 No.669 | 将有序数组转换为二叉搜索树 No.108 | 把二叉搜索树转换为累加树 No.538

文章目录 Day 2301. 修剪二叉搜索树&#xff08;No. 669&#xff09;1.1 题目1.2 笔记1.3 代码 02. 将有序数组转换为二叉搜索树&#xff08;No. 108&#xff09;2.1 题目2.2 笔记2.3 代码 03. 把二叉搜索树转换为累加树&#xff08;No. 538&#xff09;3.1 题目3.2 笔记3.3 代…

Linux_进程地址空间

我们用c语言写的程序&#xff0c;经过编译后形成可执行程序存放在硬盘。当运行该程序时&#xff0c;操作系统将该程序加载到内存中&#xff0c;创建进程控制块&#xff0c;变为进程&#xff0c;然后开始执行该程序。大家是否想过&#xff0c;操作系统是如何加载的呢&#xff1b…

有状态DHCPv6快速模式配置及EUI-64介绍

正文共&#xff1a;1024 字 15 图&#xff0c;预估阅读时间&#xff1a;3 分钟 我们现在已经熟悉了IPv6的地址架构&#xff08;IPv6地址架构一本通&#xff09;&#xff0c;掌握了IPv6地址的手工配置方式&#xff08;IPv6从入门到精通&#xff09;和DHCPv6有状态地址配置&#…

01.数据结构篇-链表

1.找出两个链表的交点 160. Intersection of Two Linked Lists (Easy) Leetcode / 力扣 例如以下示例中 A 和 B 两个链表相交于 c1&#xff1a; A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 但是不会出现以下相交的情况&#xff0c;因为每个节点只有一个…

Peter算法小课堂—区间模型(2)

上次咋们讲了前两个区间模型&#xff1a;1.最大不重叠区间数 2.不重叠区间最少分组数。今天我们就学习&#xff1a;最小区间覆盖问题、区间重叠最厚层数&#xff01; 最小区间覆盖 先看三道题 那么&#xff0c;第1题&#xff0c;它是浮点数的题&#xff0c;也就要求首尾相同。…

通过增加缓存优化斐波那契递归的冗余计算

一、python 斐波那契数列的递归实现存在大量的冗余计算。例如&#xff0c;为了计算fib(n)&#xff0c;我们需要计算fib(n-1)和fib(n-2)&#xff0c;但是在计算fib(n-1)的过程中&#xff0c;我们又会重复计算fib(n-2)。当n的值很大时&#xff0c;这种冗余计算会消耗大量的计算资…

机器学习:ROC曲线笔记

ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;是一种用于评估二分类模型性能的图形化工具&#xff0c;主要用于展示在不同阈值&#xff08;Threshold&#xff09;下模型的真阳性率&#xff08;True Positive Rate&#xff0c;TPR&#xff09;和假阳…

最新在线看4K高清电影网站推荐

随着互联网技术的发展&#xff0c;观看高清电影已经不再是难事。这里我为大家分享几个最新的在线看4K高清电影网站&#xff0c;让您在家就能享受到极致观影体验。 通过下面这个即可 1. 【超清影视】 【超清影视】是国内新兴的4K高清电影网站&#xff0c;拥有海量的影片资源&a…

【送书福利-第三十一期】《区块链安全理论与实践(安全技术经典译丛)》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

幻兽帕鲁游戏官方更新了版本,联机时提示版本不适用,无法加入,怎么办?

如果你在登录游戏的时候提示&#xff1a;您正在尝试加入的比赛正在运行不兼容的游戏版本。请尝试升级游戏版本。此时就说明你需要更新部署在服务器内的幻兽帕鲁了。 1、如果你使用幻兽帕鲁应用模板部署游戏&#xff0c;那么可以选择使用游戏配置面板一键更新。 2、如果你使用一…

使用Xcode 真机无线调试

1.iPhone和Xcode连在同一WIFI下 2.打开Xcode 顶部菜单 选中Window -> Device and Simulators 3.选中Connect via network (注意&#xff1a;勾选前还要用数据线连接,测试机要设置密码,出弹窗的话要点击信任) 真机设备旁边出现小地球 就代表成功了

【ES】--ES集成热更新自定义词库(字典)

目录 一、问题描述二、具体实施1、Tomcat实现远程扩展字典2、验证生效3、ES配置远程扩展字典4、为何不重启ES能实现热更新 一、问题描述 问题现象: 前面完成了自定义分词器词库集成到ES中。在实际项目中词库是时刻在变更的&#xff0c;但又不希望重启ES&#xff0c;对此我们应…