【前端学习】作用域实际问题学习记录

ops/2024/11/15 4:36:22/

在复习apply,call,bind的时候遇到了一个作用域问题。

let name = 'noName'
let age = 18function getMyname() {console.log('my name is ' + this.name, 'and I am ' + this.age +' years old');
}getMyname()
}

在全局使用let定义变量name和age之后,运行getMyname函数。
我就想着,在全局作用域定义一个全局的属性,在调用函数时未指明this的指向那么this就是指全局。通过this.name和this.age能够获取到在全局定义的值。

但是打印出的结果如下:
my name is undefined and I am undefined years old

通过了解发现:用let和const定义变量不会将变量绑定在全局对象上,使用var或者不用变量声明符则会将变量绑定在全局对象上。

于是我继续尝试:

var name = 'noName'
var age = 18function getMyname() {console.log('my name is ' + this.name, 'and I am ' + this.age +' years old');
}getMyname()

发现在vscode上运行文件得到的依然是:my name is undefined and I am undefined years old。我很不解,于是通过不同代码继续测试

在vscode上运行如下:

var value1 = "张三"
let value2 = "李四"
const value3 = "王五"
console.log(global.value1) // undefined
console.log(global.value2) // undefined
console.log(global.value3) // undefined

在浏览器运行代码如下:

var value1 = "张三"
let value2 = "李四"
const value3 = "王五"
console.log(global.value1) // 张三
console.log(global.value2) // undefined
console.log(global.value3) // undefined

在这里插入图片描述

探究发现原因:每个node.js文件都是一个独立的模块,因此在js文件下无论用var、let还是const定义的变量都不会添加到全局对象上,必须显式添加到 global 对象上才能在其他模块中访问。

涉及其他知识点:

  • window对象是浏览器的全局对象;
  • global 对象 是 Node.js 提供的用于存储全局变量和函数的对象,与 Node.js 的安装位置无关。

http://www.ppmy.cn/ops/114573.html

相关文章

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…

Flink 实现无界流

Flink 实现无界流 package org.example.test;import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.opera…

【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。 你可以任意排列…

【数据结构】经典题

所以,语句 x; 的语句频度为:n(n1)(n2)/6 选C 临时变量 t:只使用了一个额外的变量来存储交换的值。 没有使用额外的数组:所有的操作都是在原数组 a 上进行的。 因此,算法的空间复杂度是常数级别的&#xff0…

使用Apache SeaTunnel高效集成和管理SftpFile数据源

本文为Apache SeaTunnel已经支持的SftpFile Source Connector使用文档,旨在帮助读者理解如何高效地使用SFTP文件源连接器,以便轻松地使用Apache SeaTunnel集成和管理您的SftpFil数据源。 SftpFile 是指通过 SFTP(Secure File Transfer Proto…

LeetCode题练习与总结:回文链表--234

一、题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2: 输入&#x…

python函数的一些介绍

函数的多返回值 def 函数(): return 1,2,3 x,y,z 函数()#对应1,2,3 有几个就要有对应的几个变量存储,不然会报错 函数的关键字参数 def 函数(name,id): 打印输出name和id 函数…

CSAPP Bomb Lab

本 Lab 可以说是 CSAPP 的几个 Lab 中最为人津津乐道的一个,对应知识点为书中的第 3 章(程序的机器级表示),要求使用 GDB 调试器,对汇编语言进行调试,从而得出正确的“拆弹密码”。共分为 6 个关卡和一个隐…