js--变量的作用域
作为一名菜鸟的我,每天学点的感觉还是不错的。今天学习闭包的过程中看到作用域与作用域链这两个概念,我觉得作为一名有追求的小白,有必要详细了解下。
变量的作用域
就js变量而言,有全局变量和局部变量。这里我觉得这个按字面意思理解就行了.......下面举个例子
var message = "今天我做的糯米蒸排骨"; //定义一个全局变量function doL(){ var ss = "侠客行很好看"; //定义一个局部变量 alert(message); //输出"今天我做的糯米蒸排骨",在函数中可以引用到全局变量 function alertDo(){ alert(ss); } alertDo(); //输出"侠客行很好看",这就涉及变量的作用域了 };doL(); alertDo(); //没法输出 alertDo is not definedalert(message); //可以输出"今天我做的糯米蒸排骨"
这边有2个很有意思的地方
1.当变量不用var声明的时候我们实际上声明了一个全局变量,好吧,这是错误的,看下面,num是一个全局变量,
而 mum = 1;
事实上是对属性赋值操作。首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc。。。)中解析 mum ; 如果在任何当前作用域链中找到mum ,则会执行对mum 属性赋值; 如果没有找到mum ,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造mum 属性并赋值。
注意!它并不是声明了一个全局变量,而是创建了一个全局对象的属性。由于变量声明自带不可删除属性,比较var num = 1 跟 num = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。
var num =1; mum = 1;
2.变量声明会提前到函数顶部,其实之前已经遇到过了
var scope="global"; function t(){ console.log(scope); var scope="local" console.log(scope); } t();
它首先会输出undefined,然后才是scope,它会将变量提前声明并且覆盖局部变量,等价于下面这种情况
var scope="global"; function t(){ var scope; console.log(scope); scope="local" console.log(scope); } t();
以上是js--变量的作用域的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

typedef struct 在 C 语言中用于创建结构体类型别名,简化结构体使用。它通过指定结构体别名将一个新的数据类型作为现有结构体的别名。优点包括增强可读性、代码重用和类型检查。注意:在使用别名前必须定义结构体,别名在程序中必须唯一并且仅在其声明的作用域内有效。

Java 中的变量期望值异常可以通过以下方法解决:初始化变量;使用默认值;使用 null 值;使用检查和赋值;了解局部变量的作用域。

C++ 中的 #include 预处理器指令将外部源文件的内容插入到当前源文件中,以复制其内容到当前源文件的相应位置。主要用于包含头文件,这些头文件包含代码中需要的声明,例如 #include <iostream> 是包含标准输入/输出函数。

JavaScript 闭包的优点包括保持变量作用域、实现模块化代码、延迟执行和事件处理;缺点包括内存泄漏、增加了复杂性、性能开销和作用域链影响。

C++智能指针的生命周期:创建:分配内存时创建智能指针。所有权转移:通过移动操作转移所有权。释放:智能指针离开作用域或被明确释放时释放内存。对象销毁:所指向对象被销毁时,智能指针成为无效指针。

JavaScript 中,this 的指向类型有:1. 全局对象;2. 函数调用;3. 构造函数调用;4. 事件处理程序;5. 箭头函数(继承外层 this)。此外,可以使用 bind()、call() 和 apply() 方法显式设置 this 的指向。

可以。C++ 允许函数嵌套定义和调用。外部函数可定义内置函数,内部函数可在作用域内直接调用。嵌套函数增强了封装性、可复用性和作用域控制。但内部函数无法直接访问外部函数的局部变量,且返回值类型需与外部函数声明一致,内部函数不能自递归。

Java中的闭包允许内部函数访问外部的作用域变量,即使外部函数已经退出。通过匿名内部类实现,内部类持有一个外部类的引用,使外部变量保持活动。闭包增强了代码灵活性,但需要注意内存泄漏风险,因为匿名内部类对外部变量的引用会保持这些变量的活动状态。
