JavaScript严格模式下关于this的几种指向详解

《JavaScript严格模式下关于this的几种指向详解》是一篇关于JavaScript严格模式下this关键字相关问题的文章,下面将就该篇文章的主要内容进行详细讲解。

一、什么是严格模式

回答这个问题之前需要了解JavaScript严格模式的定义。JavaScript严格模式是当开发者使用更优化的语法、开启更严格的错误提示、禁止使用不安全的语言集合时启用的模式。

在严格模式下出现错误时,JavaScript将抛出错误,而在非严格模式下,则往往会默默地失败。因此,开发者在开发项目时建议尽可能使用严格模式。

二、关于严格模式下的this

在JavaScript严格模式下使用this时,this的值仅仅可以为undefined或null或指向一个对象(通过调用函数或对象的方法得到的this)。其他的情况当在代码执行时使用的时候,将会抛出TypeError异常。

在严格模式下,对于未指定的this,它将被设置为undefined。在非严格模式下,未指定的this将被解析为全局对象。

在下面的示例中,我们可以看到在严格模式下,未用任何对象调用foo()函数将会抛出TypeError异常,而在非严格模式下foo()函数的调用将会解析为window.foo()。

// 在严格模式下未指定this的使用
'use strict';

function foo(){
  console.log(this);
}

foo(); // TypeError: this is undefined

// 在非严格模式下未指定this的使用
function bar(){
  console.log(this);
}

bar(); // Object [global] { ... }

三、在严格模式下不允许修改this

在严格模式下,尝试修改this的值将会抛出TypeError异常。下面的示例说明了这一点。在本例中,我们在严格模式下的foo()函数中尝试使用call()方法改变函数上下文中的this的值。由于此操作属于禁止的语言集合,因此在运行时会抛出异常。

// 在严格模式下修改this的使用
'use strict';

function foo(){
  console.log(this);
}

foo.call({ a: 1 }); // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

四、总结

在JavaScript严格模式下,this的指向和非严格模式下有很大的差别。当开发者在使用this时应注意使用场景和当前的开发环境。

对于修改this的值的操作,应该尽量避免,因为这是严格模式不允许的操作。

示范代码:https://codepen.io/xiaoza/pen/BaKzEaZ

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript严格模式下关于this的几种指向详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS实现快速的导航下拉菜单动画效果附源码下载

    下面是 JS 实现快速的导航下拉菜单动画效果的完整攻略: 一、思路 首先,我们需要给下拉菜单添加一个点击事件,并在点击后显示子菜单; 接着,使用 CSS 中的 transition 属性实现下拉菜单的动画效果; 最后,用 JS 控制下拉菜单的显示和隐藏。 二、实现步骤 2.1 HTML 结构 首先,我们需要在 HTML 中添加一个导航栏和下拉菜单。 <…

    JavaScript 2023年6月11日
    00
  • javascript 常用功能总结

    JavaScript 常用功能总结 1. 变量声明和赋值 在 JavaScript 中,使用 var、let 或 const 关键字可以声明变量。 // 以 var 关键字声明一个变量 var myVar; // 以 let 关键字声明一个变量 let myLet; // 以 const 关键字声明一个常量 const myConst = "Hel…

    JavaScript 2023年5月17日
    00
  • Javascript Math PI 属性

    JavaScript中的Math.PI属性是一个常数,表示圆周率π的值。以下是关于Math.PI属性的完整攻略,含两个示例。 Math对象的PI属性 JavaScript对象中的PI属性是一个常数,表示圆周率π的值。 下面是PI属性语法: Math.PI 下面是一个PI属性的示例: console.log(Math.PI); // 输出 3.14159265…

    JavaScript 2023年5月11日
    00
  • js里取容器大小、定位、距离等属性搜集整理

    在JavaScript中,获取元素的位置、大小、距离等属性是开发中经常使用的操作,以下是获取常用属性的完整攻略: 获取元素大小 获取元素的大小(宽度和高度)有不同的方法,其中包括: 通过clientWidth和clientHeight clientWidth或clientHeight属性返回元素的可见宽度和高度(不包括滚动条)。 const element …

    JavaScript 2023年6月10日
    00
  • Visual Studio中js调试的方法图解

    下面我将详细地讲解“Visual Studio中js调试的方法图解”的完整攻略。 一、Visual Studio中js调试的方法图解 在 Visual Studio 中,开发者可以方便地对 JavaScript 代码进行调试,它提供了丰富的调试工具和应用程序接口。下面是使用 Visual Studio 进行 JavaScript 调试的步骤: 1. 打开一个…

    JavaScript 2023年6月11日
    00
  • JS函数式编程之纯函数、柯里化以及组合函数

    函数式编程是一种以函数为中心的编程范式。在JavaScript中,函数式编程被越来越广泛地使用。本文将介绍函数式编程中的三个重要概念:纯函数、柯里化和组合函数。 纯函数 纯函数是指满足以下条件的函数: 给定相同的输入,总是返回相同的输出。 不产生副作用,即不会影响到函数外部的状态,如修改全局变量或参数。 纯函数的优点在于: 可以简化代码的测试和调试,因为纯函…

    JavaScript 2023年5月27日
    00
  • JavaScript如何获取数组最大值和最小值

    获取数组最大值和最小值是JavaScript中常用的操作,本文将详细讲解如何使用JavaScript获取数组最大值和最小值。 1. 使用Math对象中的max()和min()方法 JavaScript中的Math对象包含了许多常用的数学方法,包括获取数组最大值和最小值的方法——max()和min()。以下是使用max()和min()方法的代码示例: cons…

    JavaScript 2023年5月27日
    00
  • javascript列表框操作函数集合汇总

    我们来详细讲解一下 “javascript列表框操作函数集合汇总” 的完整攻略。 简介 “javascript列表框操作函数集合汇总” 提供了一系列的javascript函数,可以用来操作列表框的各种功能。其中包括添加、删除、排序、移动、选中等。下面是具体的函数操作说明。 操作说明 1. 添加项(addItem) 这个函数用来向指定的列表框中添加一项。函数代…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部