有关js的变量作用域和this指针的讨论

标题:有关JS的变量作用域和this指针的讨论

1. 变量作用域

1.1 作用域是什么

在JS中,作用域可以理解为变量的有效范围。JS支持两种作用域:全局作用域和函数作用域。

全局作用域是指整个JS文件,其内定义的变量可以被文件中任何一个函数所使用。

函数作用域是指只在函数体内部(包括函数体内嵌套的函数中)定义的变量。这些变量只在函数体内及其内部的函数中有效。

1.2 变量声明提前

在JS中,变量可以在使用前先声明。这是因为JS中存在变量声明提前的机制,即JS在运行时会将函数中声明的变量提前至函数的顶部。

示例代码:

function test(){
  console.log(a); // undefined
  var a = 10;
  console.log(a); // 10
}
test();

1.3 块级作用域

在ES6中,引入了块级作用域。块级作用域是指if、for、while等语句的{}内(即花括号内)定义的变量,在语句外部无法访问,但在语句内部可以。

示例代码:

var a = 10;

if(true){
  var a = 20;
  let b = 30;
}
console.log(a); // 20
console.log(b); // Uncaught ReferenceError: b is not defined

2. this指针

2.1 this是什么

在JS中,this指针用于引用当前正在执行的函数所属的对象。this指针的实际指向是在函数被调用时确定的。

2.2 函数调用方式对this的影响

函数的调用方式有以下几种:

  1. 作为普通函数调用

当函数作为普通函数来调用时,this指向全局对象。在浏览器环境下,全局对象就是window对象;在Node.js环境下,全局对象就是global对象。

javascript
function test(){
console.log(this);
}
test(); // window

  1. 作为对象方法调用

当函数作为对象方法来调用时,this指向调用该方法的对象。

javascript
var obj = {
name: 'Tom',
sayName: function(){
console.log(this.name);
}
};
obj.sayName(); // "Tom"

  1. 作为构造函数调用

当函数作为构造函数来调用时,this指向新创建的对象。

javascript
function Person(name){
this.name = name;
}
var p = new Person('Tom');
console.log(p.name); // "Tom"

  1. 使用apply、call或bind方法调用

当使用apply、call或bind方法来调用函数时,this指向调用该方法时传入的第一个参数。

javascript
var obj1 = {
name: 'Tom'
};
var obj2 = {
name: 'Jerry'
};
function test(){
console.log(this.name);
}
test.apply(obj1); // "Tom"
test.call(obj2); // "Jerry"
var f = test.bind(obj1);
f(); // "Tom"

2.3 箭头函数中的this

在箭头函数中,this指向的是包含箭头函数的函数的this指针,而不是箭头函数自己的this指针。

示例代码:

var obj = {
  name: 'Tom',
  sayName: function(){
    var func = ()=>console.log(this.name);
    func();
  }
};
obj.sayName(); // "Tom"

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:有关js的变量作用域和this指针的讨论 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 小程序tab页无法传递参数的方法

    小程序tab页无法传递参数是因为tab页在切换时不会重新加载,也就无法获取新的参数。解决这个问题的方法有多种,下面将提供两条示例说明。 方法1:使用全局变量传参 在小程序的app.js文件中定义一个全局变量globalData,用于存储需要传递的参数,然后在tab页的onLoad生命周期函数中获取这个参数即可。 代码示例: // app.js App({ g…

    JavaScript 2023年6月11日
    00
  • 如何解决attachEvent函数时,this指向被绑定的元素的问题?

    在解决attachEvent函数中this指向被绑定的元素问题之前,我们需要了解attachEvent函数以及this指针的相关知识。 attachEvent函数 attachEvent是IE浏览器特有的一种事件绑定方法,用于绑定DOM元素的事件(如点击、鼠标移动、键盘输入等),其语法如下: element.attachEvent(event, functi…

    JavaScript 2023年6月11日
    00
  • javascript两种function的定义介绍及区别说明

    Javascript中声明函数有两种常见的方式,并且这两种方式是有所不同的。 声明方式一:函数声明 函数声明是最常见的一种方式,有两个部分组成:函数名和函数体。函数声明的语法如下: function functionName(parameters){ //函数体 } 其中,function为关键字,functionName为函数名称(可以自定义),param…

    JavaScript 2023年5月27日
    00
  • JS代码判断集锦大全第3/5页

    这篇“JS代码判断集锦大全第3/5页”的攻略是一篇非常详细的教程,下面我将逐步地为您介绍它的主要内容。 攻略概述 这篇攻略主要是针对“JS代码判断集锦大全第3/5页”这一题目,介绍其中一些常见的判断语句和用法。在学习本文之前,您需要具备一定的JavaScript编程基础。 判断语句 判断语句是JavaScript程序中非常重要的部分之一。您可以利用判断语句来…

    JavaScript 2023年5月27日
    00
  • JavaScript防止表单重复提交的方法

    针对JavaScript防止表单重复提交的方法,下面我将为您详细说明相关攻略。 1. 前置知识 在介绍防止表单重复提交的方法之前,你需要掌握一下几个前置知识: 1.1 同步和异步 同步和异步是指程序在执行任务的时候,是否等待上一个任务执行完毕。同步任务会等待上一个任务执行完成,而异步任务则不会阻塞程序的执行。 1.2 发送Ajax请求 Ajax是异步Java…

    JavaScript 2023年6月10日
    00
  • JavaScript基础介绍与实例

    我来为您详细讲解“JavaScript基础介绍与实例”的完整攻略。 一、JavaScript基础介绍 JavaScript是一种广泛应用于web前端开发中的脚本语言,它可以让网页变得更加动态,给用户带来更好的体验。它被广泛应用于交互、动画、特效、数据处理、表单验证等方面,是web前端开发中必备的技术之一。 1.1 前置知识 在学习JavaScript之前,需…

    JavaScript 2023年5月18日
    00
  • JavaScript中对象属性的添加和删除示例

    请允许我详细讲解一下如何在JavaScript中添加和删除对象属性。 添加对象属性 直接添加属性 直接在对象上添加属性,可以通过 .(点) 或 [ ] 符号来访问或定义属性,示例如下: const person = { name: "张三", age: 18 }; person.gender = "male"; // …

    JavaScript 2023年5月27日
    00
  • js遍历json的key和value的实例

    首先我们需要明确一点,JavaScript中的JSON是一种轻量级的数据交换格式。它包含了一些键值对,值可以是数组、对象、数字、字符串、布尔值或null。如果我们需要在JavaScript中操作JSON数据,我们可以使用JSON对象提供的方法。下面我将介绍如何使用JavaScript遍历JSON的key和value。 步骤1:获取JSON数据 首先,我们需要…

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