第六节JavaScript this、let、const关键字

一、JavaScript this关键字

1、描述

面向对象语言中,this表示当前对象的一个引用。

但在JavaScript中,this不是固定不变的,它会随着执行环境的改变而变化。

  1. 方法中,this表示该方法所属的对象。
  2. 如果单独使用,this表示全局对象。
  3. 在函数中,this表示全局对象。
  4. 在函数中,在严格模式下,this是未定义的(undefinded)。
  5. 在事件中,this表示接收事件的元素。
  6. 类似call()和apply()方法,可以将this引用到任何对象。

2、this使用

1)、方法中的this

在对象方法中,this指向调用它所在方法的对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Javascript基础学习</title>
	</head>
	<body>
		<h2>JavaScript <b>this</b> 关键字</h2>
		<p>实例中,<b>this</b> 指向了 <b>person</b> 对象。</p>
		<p>因为 person 对象是 fullName 方法的所有者。</p>
		<p id="demo"></p>
		<script>
			// 创建一个对象
			var person = {
				firstName: "John",
				lastName: "Doe",
				id: 5566,
				fullName: function() {
					return this.firstName + " " + this.lastName;
				}
			};

			// 显示对象的数据
			document.getElementById("demo").innerHTML = person.fullName();
		</script>

	</body>
</html>

运行结果:

在上述实例中,this表示person对象。

fullName方法所属的对象就是person。

2)、单独使用this

单独使用this,则它指向全局对象。

<script>
var x = this;
document.getElementById("demo").innerHTML = x;
</script>

输出结果:[object Window]

"use strict";

var x = this;

在严格模式下,如果单独使用,this也是指向全局对象。

3)、函数中使用this(默认)

在函数中,函数的所属者默认绑定到this上。

<script>
document.getElementById("demo").innerHTML=
myFunction();
function myFunction() {
  return this;
}
</script>

输出结果:[object Window]

在浏览器中,Window就是该全局对象为【object Window】。

4)、函数中使用this(严格模式)

严格模式下函数是没有绑定到this上,这时候this是undefined。

<script>
"use strict";
document.getElementById("demo").innerHTML= myFunction();
function myFunction() {
  return this;
}
</script>

输出结果:undefined

5)、事件中使用this

在HTML事件语句中,this指向了接收事件的HTML元素:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Javascript基础学习</title>
	</head>
	<body>
		<h2>JavaScript <b>this</b> 关键字</h2>
		<button onclick="this.style.display='none'">点我后我就消失了</button>
	</body>
</html>

输出结果:

点击“点我后我就消失了”的按钮后,该button消失。

6)、对象方法中绑定this

下面实例中,this 是 person 对象,person 对象是函数的所有者:

var person = {
  firstName  : "John",
  lastName   : "Doe",
  id         : 5566,
  myFunction : function() {
    return this;
  }
};

下面这个实例说明: this.firstName 表示 this (person) 对象的 firstName 属性。

var person = {
  firstName: "John",
  lastName : "Doe",
  id       : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};

7)、显示函数绑定

在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。

在下面实例中,当我们使用 person2 作为参数来调用 person1.fullName 方法时, this 将指向 person2, 即便它是 person1 的方法.

二、JavaScript let、const关键字

1、描述

let 声明的变量只能在let命令所在的代码块内有效。

const 声明一个只读的变量,一旦声明,常量的值就不能改变。

在ES6之前,JavaScript只有两种作用域:全局变量和函数内的局部变量。

2、let

全部变量:

在函数外声明的变量作用域是全局的

全局变量在JavaScript程序中的任何地方都可以访问。

局部变量:

在函数内声明的变量作用域是局部的(函数内)。

函数内使用var 声明的变量只能在函数内访问,如果不使用var 声明则是全局变量。

JavaScript块级作用域:

函数内使用 var 关键字声明的变量不具备块级作用域的特性,它在{}外依然能被访问到。

let声明的变量只在let命令所在代码块{}内有效,在{}之外不能访问。

重新定义变量:

使用var关键字重新声明变量可能会带来问题,在代码块中重新声明的变量也会重新声明块外的变量。

let关键字就可以解决这个问题,因为它只在let命令所在的代码块{}内有效。

循环作用域:

使用var关键字

上述实例,使用var关键字声明的变量是全局的,包括在循环体内与循环体外。

使用let关键字:

上述实例使用let关键字,它声明的变量作用域只在循环体内,在循环体外的变量不受影响。

3、const

const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

const定义常量与使用let 定义的变量相似:

二者都是块级作用域

都不能和它所在作用域内的其他变量或函数拥有相同的名称

两者还有以下两点区别:

const声明的常量必须初始化,而let声明的变量不用

const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。

const 声明的常量必须初始化:

非真正的常量:

const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。

下面的代码并不会报错:

但是我们不能对常量对象重新赋值:

以下实例修改常量数组:

但是我们不能对常量数组重新赋值:

备注:

  1. 使用var关键字声明的变量,在任何地方都可以修改

2.在相同的作用域或块级作用域中,不能使用const关键字来重置var和let 关键字声明的变量

3.在相同的作用域或块级作用域中,不能使用const关键字来重置const关键字声明的变量

4.const关键字在不同的作用域,或不同块级作用域中是可以重新声明赋值的:

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

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

相关文章

[Halcon图像] 基于多层神经网络MLP分类器的思想提取颜色区域

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

排序的简单理解(上)

1. 排序的概念及引用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff08;按照我们的需求能够有序的将数据信息排列起来&#xff09;。 稳定性&#xff1a;假…

shiro入门demo(一)身份验证

shiro&#xff08;身份&#xff09;认证&#xff0c;简单来说就是登录/退出。搭建springboot项目&#xff0c;引入shiro和单元测试依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-…

Nacos-NacosRule 负载均衡—设置集群使本地服务优先访问

userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 NacosRule 权重计算方法 目录 一、介绍 二、示例&#xff08;案例截图&#xff09; 三、总结 一、介绍 NacosRule是AlibabaNacos自己实现的一个负载均衡策略&…

【Spark精讲】Spark Shuffle详解

目录 Shuffle概述 Shuffle执行流程 总体流程 中间文件 ShuffledRDD生成 Stage划分 Task划分 Map端写入(Shuffle Write) Reduce端读取(Shuffle Read) Spark Shuffle演变 SortShuffleManager运行机制 普通运行机制 bypass 运行机制 Tungsten Sort Shuffle 运行机制…

mysql EXPLAIN命令的输出列简介

MySQL :: MySQL 8.2 Reference Manual :: 8.8.2 EXPLAIN Output Format explain命令提供了mysql数据库如何执行SQL语句的信息&#xff0c;可以跟 SELECT, DELETE, INSERT, REPLACE, UPDATE, 和 TABLE一起使用。 explain命令可能输出多行&#xff0c;每行涉及一个表 。 先来看…

数据之美:零售业的变革之道

数据可视化能够为零售业带来令人瞩目的变化。随着零售业务的发展&#xff0c;数据可视化成为了洞察市场、优化运营并提升客户体验的强大工具。下面我就以可视化从业者的视角出发&#xff0c;简单分析一下数据可视化为零售业可能带来的改变。 数据可视化让零售商深入了解消费者行…

LeetCode(59)反转链表 II【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 反转链表 II 1.题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&am…

【为什么POI的SXSSFWorkbook占用内存更小?】

&#x1f513;为什么POI的SXSSFWorkbook占用内存更小&#xff1f; &#x1f3c6;POI的SXSSFWorkbook&#x1f3c6;POI的SXSSFWorkbook占用内存&#x1f3c6;扩展配置行缓存限制 &#x1f3c6;POI的SXSSFWorkbook SXSSFWorkbook类是Apache POI库的一部分&#xff0c;它是一个流…

第五节JavaScript typeof、类型转换与正则表达式

一、typeof、null和undefined 1、typeof操作符 使用typeof操作符来检测变量的数据类型。 实例&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>JavaScript基础知识学习</title></head><bod…

单元测试二(实验)-云计算2023.12-云南农业大学

1、实践系列课《深入浅出Docker应用》 https://developeraliyun.com/adc/scenarioSeries/713c370e605e4f1fa7be903b80a53556?spma2c6h.27088027.devcloud-scenarioSeriesList.13.5bb75b8aZHOM2w 容器镜像的制作实验要求 创建Dockerfile文件: FROM ubuntu:latest WORKDIR data…

C++初阶(十六)优先级队列

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、priority_queue的介绍和使用1、priority_queue的介绍2、priority_queue的使用 二、priori…

高性能国产TYPE-C/DP/EDP转MIPIDSI/CSI/LVDS,龙迅LT7911D,支持高达4K60HZ的分辨率

LT7911D概述&#xff1a; T7911D是一款高性能TYPE-C/DP/EDP转2 PORT MIPI或者LVDS的芯片&#xff0c;目前主要在AR/VR或者显示器上应用的很多&#xff0c;对于DP1.2输入&#xff0c;LT7911D可配置为1/2/4车道。自适应均衡化使其适用于长电缆应用&#xff0c;最大带宽可达21.6G…

【AntDB数据库】亚信安慧通过CMMI5级认证

近日&#xff0c;湖南亚信安慧科技有限公司&#xff08;以下简称“亚信安慧”&#xff09;通过CMMI5级认证。这标志着亚信安慧在软件研发能力、过程组织能力、项目管理能力、解决方案交付能力等方面达到了国际先进水平&#xff0c;具备为通信、金融、交通、能源、物联网等行业客…

图片如何无损放大?亲测三款好用图片无损放大工具

图片如何无损放大&#xff1f;当遇到图片不清晰或模糊受损的情况时&#xff0c;我们往往希望能够使用这张图片。然而&#xff0c;图片的模糊问题往往令人困扰。幸运的是&#xff0c;我们可以使用一些方法将图片无损放大&#xff0c;从而解决照片模糊的问题。今天&#xff0c;我…

开源云原生网关Linux Traefik本地部署结合内网穿透远程访问

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…

实验01:静态路由配置实验

1.实验目的&#xff1a; 本次实验的主要目的是了解静态路由的配置和实现原理&#xff0c;熟悉路由器的基本操作&#xff0c;掌握在网络中进行静态路由配置的方法和技巧。 2.实验内容&#xff1a; 搭建网络拓扑&#xff0c;包括三台路由器和两台PC。配置路由器的IP地址和路由…

深入理解C语言的函数参数

1、一个简单的函数 int Add(int x, int y) {return x y; }int main() {printf("%d", Add(2, 3, 4, 5, 6));return 0; } 这一段足够简单的代码&#xff0c;闭眼都能知道运行结果会在屏幕上打印 5 。那编译器是怎么处理后面的 4、5、6 &#xff1f; 我们再看看这个函…

【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解

目录 1 设置请求映射路径1.1 环境准备 1.2 问题分析1.3 设置映射路径 2 请求参数2.1 环境准备2.2 参数传递2.2.1 GET发送单个参数2.2.2 GET发送多个参数2.2.3 GET请求中文乱码2.2.4 POST发送参数2.2.5 POST请求中文乱码 欢迎大家回到《Java教程之Spring30天快速入门》&#xff…

Vue3-17-ref 模板引用的基本使用

什么是模板引用 简单来说&#xff0c;就是在 js 代码中 获取到 html 中的dom元素的完整信息&#xff0c; 从而实现直接操作dom元素的效果。模板引用的语法 1、给 dom 元素添加 ref名称 属性&#xff0c;指定一个独有的名称&#xff1b; 2、js 中 声明一个 与 dom 元素的 ref 同…